Я хочу реализовать поведение, которое вставляет строку в таблицу после сохранения некоторых моделей. Вкратце, мое текущее решение таково: (Это всего лишь пример моего кода, поэтому, пожалуйста, не комментируйте правильность базы данных или модели дескриптора).
- У меня есть прослушиватель для строки поведения вставки при обновлении / вставке объекта
DescriptionListener.java
public class DescriptionListener {
@PostPersist
public void onPostPersist(Object entity) {
Description description = new Description("INSERT");
description.save();
}
@PostUpdate
public void onPostUpdate(Object entity) {
Description description = new Description("UPDATE");
description.save();
}
}
- У меня есть модель БД для слушателя
Description.java
@Entity
@Table(name="DESCRIPTION")
public class Description extends GenericModel {
@Id
@GeneratedValue
@Column(name="ID")
public Long id;
@Column(name="INFO")
public String info;
public Description(String info) {
this.info = info;
}
}
- Я использую список объектов в классе, который хочу прослушать с аннотацией
@EntityListener
@Entity
@EntityListeners(DescriptionListener .class)
@Table(name="TABLE")
public class Table extends GenericModel {
...
}
Но после того, как я проверил функциональность, я прочитал эти слова в документе:
Метод обратного вызова не должен вызывать методы EntityManager или Query!
Теперь я думаю, что метод save()
- это метод Query
, поэтому я не могу использовать его в функциях обратного вызова (но в моем случае он работает так же), и мой вопрос:
Как реализовать поведение того же типа и сохранить модель после сохранения другой модели?
Есть ли что-нибудь, что может помочь мне в игре?
Я следую этой документации: Слушатели сущностей и методы обратного вызова