#spring-data #spring-data-rest
#spring-данные #spring-data-rest
Вопрос:
Я использую a RepositoryRestController
для предоставления конечной точки REST для изменения объекта X
, который связан с другим объектом Y.
class X {
Set<Y> y_set;
}
Я хотел бы выполнить некоторый код, когда Y
s добавляются или удаляются в an X
.
class MyAction {
// initialised somehow
XRepository xRepo;
public void unlinkYFromX() {
X x = xRepo.getAnX();
// get a Y from the ones linked to X using some logic
Y y = x.getYs().get(0);
x.getYs().delete(y);
xRepo.save(x);
// I expect the event handlers to be trigger now
// giving me a reference to x and y
}
}
Я пытаюсь определить a RepositoryEventHandler
с помощью функции-обработчика, аннотированной HandleBeforeLinkSave
:
@RepositoryEventHandler
class XYLinkHandler {
@HandleBeforeLinkSave
public void handleYLinkSave(X x, Object linked) {
// do some code with the source X
// and the newly linked Y
}
}
Проблема в том, что 2-й аргумент функции-обработчика всегда равен null. Другими словами, он не содержит Y
ссылки, на которую я ссылаюсь.
То же самое явление (отсутствующая ссылка на ссылку) происходит независимо от того, является ли это обработчиком событий до, после, сохранения или удаления.
Кто-нибудь сталкивался с этой проблемой? У кого-нибудь есть решение или обходной путь?
Спасибо.
Комментарии:
1. Есть ли шанс, что вы сможете подготовить простой репродуктор и сообщить о проблеме? Я только что проделал некоторую работу в этой области, чтобы улучшить возможность выбора интересующих вас связанных объектов. В настоящее время вы должны увидеть полное значение свойства (отдельного объекта или коллекции), переданного в метод, если вы объявите его приемлемым
Object
для связанного элемента.2. Спасибо, @OliverDrotbohm, за то, что потратил время и усилия на расследование. Вы имеете в виду, что если родительский объект
X
ссылается на набор с 2 дочерними объектамиY
, и я добавляю ещеY
один в набор или удаляю aY
из набора, я должен получать добавленный или удаленныйY
элемент вlinked
параметре? В моих тестах этого не происходит.linked
Параметр всегда содержит прокси для пустого объекта.3. Нет. Вы должны увидеть значение свойства
X
, которое содержитY
s. Код, запускающий события, находится здесь . Как вы можете видеть,linked
атрибут события получает переданное значение свойства. Это, в свою очередь, должно быть инициализировано и привязано к представленным значениям.4. Допустим, мне нужно что-то сделать с Y, который был отсоединен от X. Как я мог это сделать? Я добавил сценарий в описание.
5.Вы хотите сказать, что обработчики событий получают экземпляр X, который я изменил, и
y_set
Set
объект? И что событие before будет содержать y_set перед удалением, а событие after получит его содержимое после удаления?