【问题标题】:EntityManager inject good practiceEntityManager 注入良好实践
【发布时间】:2018-06-01 13:31:08
【问题描述】:

如标题所示——为什么使用 CDI(上下文和依赖注入)来注入 EntityManager(使用 Producer 和 @Inject 注解)被称为好习惯?为什么比使用@PersistenceContext注解更好?我读到这是一个首选的实现,但我找不到原因。

【问题讨论】:

  • 附带说明:CDI 代表“上下文和依赖注入”。

标签: java jpa jakarta-ee cdi


【解决方案1】:

CDI 是 Java EE 中依赖注入的标准技术,它方便EntityManager 创建方法生产者,然后您可以简单地注入到您的 bean 中。

@PersistenceContext 注释具有许多可配置元素(例如 name),例如,您可能不想在整个应用程序中复制它们。

当您有多个持久性单元时,

CDI 注入特别有用。然后您可以利用 CDI 限定符进行注入:

public class Databases {

    @Produces @Users 
    @PersistenceContext(unitName="UserData")
    EntityManager userEntityManager;

    @Produces @Documents
    @PersistenceContext(unitName="DocumentData")
    EntityManager docDatabaseEntityManager;
}
@Inject @Users
EntityManager em;
@Inject @Documents
EntityManager em;

【讨论】:

  • 感谢您的解释!我还读到通过 PersistenceContext 注入不是线程安全的 - 正确吗?
  • @Adam EntityManager 不是线程安全的。但是您应该阅读此answer 以了解更多详细信息。
  • @Adam 问题是,你为什么需要“线程安全”。通常,容器控制并行线程中运行的内容以及共享的实例。在这种情况下,您无需担心注入的 EntityManager-Instances 的线程安全性。每个线程将使用自己的事务工作,因此使用自己的 EntityManager。
猜你喜欢
  • 2018-12-28
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
  • 2011-03-09
  • 2015-06-09
相关资源
最近更新 更多