JPA的批量更新会触发TransactionalEventListener吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JPA的批量更新会触发TransactionalEventListener吗?相关的知识,希望对你有一定的参考价值。
我有一个使用Hibernate的项目。持久性包中映射的所有对象(带注释)将在事务方法结束时自动更新(如果已修改)。
我想用JPA 2.1中的CriteraUpdate
执行批量更新,但我需要更改对象以从Spring触发TransactionalEventListeners
。如果我更改了对象,并且没有调用任何保存方法,那么即使我使用了JPA,hibernate也会保留每个对象?
另外,我不知道TransactionalEventListener
是否可以使用JPA生命周期而不是Hibernate(我实现了ApplicationEventPublisherAware
接口)。
如果您正在使用JPA方法进行orm操作,我希望您使用的是EntityManager接口。
这是一个很好的方法,因为您正在与API交互而不是实现(作为Hibernates Session类)。在幕后,EntityManager无论如何都在调用Session类,并且就像装饰器一样,所以Hibernate正在做所有的工作。
如果你的spring事务bean被正确配置为使用Hibernate的SessionFactory,那么监听器应该捕获事件。
我唯一能想到的是,当触发批量操作时,JPA的PersistenceContext被省略,而不是单个实体dml操作和查询。一切仍然包含在事务中,因此,应该再次调用侦听器。
可以肯定的是,如果没有事务存在,请将此标志放在@TransactionalEventListener上,如规范所示:
如果事件未在托管事务的边界内发布,则除非显式设置fallbackExecution()标志,否则将丢弃该事件。
以上是关于JPA的批量更新会触发TransactionalEventListener吗?的主要内容,如果未能解决你的问题,请参考以下文章