我做了一些研究,但未能找到
之间的差异JPA @EntityListeners , @PrePersist
和
Spring @RepositoryEventHandler, @HandleBeforeSave
感谢。
答案 0 :(得分:5)
@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。等...... ..