java - 您可以从 EntityListeners 访问 EntityManagers 吗?

标签 java jpa jakarta-ee entitymanager entitylisteners

我知道 JSR-000220 Enterprise JavaBeans 3.0 Final Release(持久性)规范指出:

“一般来说,可移植应用程序不应调用 EntityManager 或 Query 操作, 访问其他实体实例,或修改生命周期回调方法中的关系。”

这看起来非常严格。我们有一种情况,我们想从 EntityListener 中访问 EntityManager。

在 Jboss/Glassfish 或任何其他应用服务器上的监听器中使用 EntityManager 时,是否有人遇到过任何不利影响/陷阱?

最佳答案

事实上,你是对的。 JPA 规范说明了这一点,在这种情况下,它建议使用 EJB 监听器(或非 Java EE 环境中的 Spring AOP)。

我不知道你的听众的目的。但只将日志记录、身份验证和路由等横切关注点放在其中。例如,Hibernate 引用文档使用监听器来审核所有对象修改的日志。一旦 EJB 监听器可以使用实体管理器,它就可以由 EJB 监听器(或非 Java EE 环境中的 Spring AOP)完成。 Java EE 规范允许它。因此,EJB 监听器共享其目标 EJB 使用的相同 ENC,并且通过这种方式,也共享相同的持久性上下文(实体管理器)。

如果您愿意,请查看我的个人资料。我有很多 ORM 相关问题。

问候,

关于java - 您可以从 EntityListeners 访问 EntityManagers 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/336881/

相关文章:

java - 当我的 Java 小程序在较旧的 Java 版本上运行但使用新类时会发生什么情况?

java - 为什么多个 RXJava Observables 没有发生并行执行?

java - 无法通过 <class> 的反射 setter 设置字段值

java - 通过 GET 参数进行 Spring Security 授权

java - 从具有相同持久性单元的多个数据库中读取?

java - Hibernate 替换字符串条件

java - 使用 ORM 时跟踪数据库字段的更改

jakarta-ee - CDI 在从工厂模式实现创建的对象中不起作用

java - Singleton 中具有上下文类型 TRANSACTION 的 EntityManager 是否会加入外部 bean 管理的事务?

java - "String Compact"给当前的JNI引入了一些性能问题,如何避免