Использование Hibernate / JPA Event Listener для обновления одной сущности при обновлении других сущностей - PullRequest
3 голосов
/ 30 сентября 2010

В моей системе три объекта, один из которых должен быть обновлен при изменении полей в двух других:

@Entity
public class Order {
    private String name;
    private Integer quantity;
    private String status;
}

@Entity
public class OrderLocation {
    private String status;
    private String desc;
}

@Entity 
public class OrderKey {
    private String generatedKey;
}

Таким образом, после того, как любое поле в Order или OrderLocation было изменено, я должен восстановить ключ (в коде), а затем сохранить его обратно в OrderKey.

Я искал EntityListeners, чтобы сделать это, но не уверен, использовать ли версии JPA или Hibernate. Я хотел бы использовать аннотации в идеале.

Любое руководство будет высоко ценится - заранее спасибо.

1 Ответ

0 голосов
/ 19 октября 2011

Я действительно не одобряю такое решение.В проекте, в котором я работаю, мы используем специальные обработчики, которые выполняют всю обработку.Обработчики должны знать, какие объекты должны быть обновлены в случае изменений.Например, используйте абстрактный слой, который обрабатывает обновление базы данных.В случае внесения изменений в Order или OrderLocation, он обрабатывает обновление OrderKey.

Если вы используете прослушиватели, у вас также могут возникнуть проблемы с циклами.Поэтому я предлагаю использовать обработчики вместо сущностей внутри сущностей.

Но в случае, если вы хотите использовать такой механизм, возможно, вам следует попробовать @PrePersist и @PreUpdate, чтобы вызвать метод, способный обрабатывать изменения.к сущности.

...