spring RepositoryEventHandler для модификации ссылки недостающая ссылка на целевую ссылку

#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 один в набор или удаляю a Y из набора, я должен получать добавленный или удаленный Y элемент в linked параметре? В моих тестах этого не происходит. linked Параметр всегда содержит прокси для пустого объекта.

3. Нет. Вы должны увидеть значение свойства X , которое содержит Y s. Код, запускающий события, находится здесь . Как вы можете видеть, linked атрибут события получает переданное значение свойства. Это, в свою очередь, должно быть инициализировано и привязано к представленным значениям.

4. Допустим, мне нужно что-то сделать с Y, который был отсоединен от X. Как я мог это сделать? Я добавил сценарий в описание.

5.Вы хотите сказать, что обработчики событий получают экземпляр X, который я изменил, и y_set Set объект? И что событие before будет содержать y_set перед удалением, а событие after получит его содержимое после удаления?