JPA @EntityListeners,@ PrePersist和Spring @RepositoryEventHandler,@ HandleBeforeSave之间的差异

时间:2017-06-16 09:04:37

标签: java spring hibernate jpa spring-data

我做了一些研究,但未能找到

之间的差异
JPA @EntityListeners , @PrePersist 

Spring @RepositoryEventHandler, @HandleBeforeSave

感谢。

2 个答案:

答案 0 :(得分:5)

仅当通过Spring Data存储库保存实体时,

@HandleBeforeSave才有效。如果您使用@PrePersist,并且使用EntityManager::persist(),则会触发JPARepository::save(),因为它会持续调用。

@RepositoryEventHandler + @HandleBeforeSave的好处是你的@HandleBeforeSave方法是在spring bean中定义的,所以你可以与其他spring bean交互。 @EntityListeners@PrePersist只能在J2SE环境中运行时访问当前实体的状态。在J2EE中,您可以@Inject将bean转换为@EntityListeners,因为JPA子系统和CDI都由同一个Container管理。

答案 1 :(得分:0)

实际上经过更多搜索后我找到了这个答案 stackoverflow.com/a/31155291/1780517

似乎还有一个非常大的不同,@ HandleBeforeSave调用了Controller POST方法而不是存储库保存。 因此,只有当你想要来自控制器的句柄事件(PUT,POST,GET with @ HandleBeforeSave,@ HandleBeforeCreate ..)和@EntityListeners用于存储库方法保存,删除,更新@PreUpdate,@ PreRemove和时,才应该使用@RepositoryEventHandler。等...... ..