我正在使用 Hibernate 事件侦听器,例如PostDeleteEventListener, PostInsertEventListener, PostUpdateEventListener
在插入、删除和更新期间执行一些操作。现在我想使用 JPA 侦听器来执行此操作,因为如果我想从 Hibernate 迁移到任何其他 JPA 提供程序,我的侦听器应该可以工作。 Hibernate监听器给了我event
我可以从中获取事务并检查其是否已提交或回滚。 JPA 侦听器仅向我提供实体对象。现在我怎样才能在 JPA 监听器中获取事务或会话或实体管理器?提前致谢!!我使用 Jboss 作为我的 CMT。
从 JPA 2.0 开始不支持此功能。
在 JPA 2.1(预计在 Java EE 7 中)中,持久性提供程序将在托管环境(例如 JBoss 应用服务器)中将实体侦听器视为 CDI bean。来自JPA 2.1 规范的拟议最终草案 http://java.net/downloads/jpa-spec/JavaPersistencePFD.pdf,第 96 页:
Java EE 环境中的实体侦听器类支持依赖关系
通过上下文和依赖注入 API (CDI) 进行注入 [10]
当包含的存档是 bean 存档时。实体监听器
使用 CDI 注入的类也可以定义生命周期
用 PostConstruct 和 PreDestroy 注释的回调方法
注释。这些方法将在注入完成后被调用
实体侦听器实例被销毁之前的位置
分别
因此,在 JPA 2.1 中,如果您创建一个提供 EntityManager 的 CDI 生产者(只需使用 @Produces 注解 @PersistenceContext 字段),您只需将 EntityManager @Inject 到侦听器中即可。
与此同时,我不知道有任何干净或令人愉快的解决方法。我能想到的“最糟糕”的事情是将 EntityManager 配置为绑定在 JNDI 中,然后通过侦听器内的 JNDI 查找来获取它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)