【发布时间】:2017-11-18 23:45:29
【问题描述】:
我做了一些研究,但无法找到两者之间的区别
JPA @EntityListeners , @PrePersist
和
Spring @RepositoryEventHandler, @HandleBeforeSave
谢谢。
【问题讨论】:
标签: java spring hibernate jpa spring-data
我做了一些研究,但无法找到两者之间的区别
JPA @EntityListeners , @PrePersist
和
Spring @RepositoryEventHandler, @HandleBeforeSave
谢谢。
【问题讨论】:
标签: java spring hibernate jpa spring-data
实际上经过更多搜索后,我找到了这个答案 stackoverflow.com/a/31155291/1780517
似乎还有一个非常大的不同,@HandleBeforeSave 在控制器 POST 方法上调用,而不是在存储库保存上。 所以 @RepositoryEventHandler 应该只在你想处理来自控制器的事件时使用(PUT、POST、GET with@HandleBeforeSave、@HandleBeforeCreate ..),@EntityListeners 应该用于存储库方法保存、删除、更新 @PreUpdate 、@PreRemove 和等等..
【讨论】:
@HandleBeforeSave 仅在通过 Spring Data 存储库保存实体时有效。如果您使用EntityManager::persist() 并且如果您使用JPARepository::save() 将触发@PrePersist,因为它会调用persist。
@RepositoryEventHandler+@HandleBeforeSave的好处是你的@HandleBeforeSave方法是在一个spring bean中定义的,所以你可以和其他spring bean交互。 @EntityListeners 和 @PrePersist 在 J2SE 环境中操作时只能访问当前实体的状态。在 J2EE 中,您可以将 @Inject bean 转换为 @EntityListeners,因为 JPA 子系统和 CDI 都由同一个 Container 管理。
【讨论】: