Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EntityManager注入良好实践_Java_Jpa_Jakarta Ee_Cdi - Fatal编程技术网

Java EntityManager注入良好实践

Java EntityManager注入良好实践,java,jpa,jakarta-ee,cdi,Java,Jpa,Jakarta Ee,Cdi,如标题所示-为什么使用CDI(上下文和依赖项注入)注入EntityManager(使用生产者和@inject注释)被称为良好实践?为什么它比使用@PersistenceContext注释更好?我读到这是一个首选的实现,但我找不到原因。是JavaEE中依赖注入的标准技术,它可以方便地为创建方法生成器,然后您可以简单地注入到bean中 注释有许多可配置的元素(例如),例如,您可能不想在整个应用程序中复制它们 当您有多个持久性单元时,CDI注入特别有用。然后,您可以利用CDI限定符进行注射: publ

如标题所示-为什么使用CDI(上下文和依赖项注入)注入
EntityManager
(使用生产者和
@inject
注释)被称为良好实践?为什么它比使用
@PersistenceContext
注释更好?我读到这是一个首选的实现,但我找不到原因。

是JavaEE中依赖注入的标准技术,它可以方便地为创建方法生成器,然后您可以简单地注入到bean中

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

当您有多个持久性单元时,CDI注入特别有用。然后,您可以利用CDI限定符进行注射:

public class Databases {

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

    @Produces @Documents
    @PersistenceContext(unitName="DocumentData")
    EntityManager docDatabaseEntityManager;
}
是JavaEE中依赖项注入的标准技术,它可以方便地为应用程序创建一个方法生成器,然后您可以简单地注入到bean中

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

当您有多个持久性单元时,CDI注入特别有用。然后,您可以利用CDI限定符进行注射:

public class Databases {

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

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

谢谢你的解释!我还读到,通过PersistenceContext进行注入不是线程安全的,对吗?@Adam
EntityManager
不是线程安全的。但您应该阅读本文以了解更多详细信息。问题是,为什么需要“线程安全性”。通常,容器控制在并行线程中运行的内容以及共享的实例。在这种情况下,您不需要担心EntityManager实例的线程安全性。每个线程都将使用自己的事务来工作,因此使用自己的EntityManager。感谢您的解释!我还读到,通过PersistenceContext进行注入不是线程安全的,对吗?@Adam
EntityManager
不是线程安全的。但您应该阅读本文以了解更多详细信息。问题是,为什么需要“线程安全性”。通常,容器控制在并行线程中运行的内容以及共享的实例。在这种情况下,您不需要担心EntityManager实例的线程安全性。每个线程都将使用自己的事务以及自己的EntityManager工作。正如旁注:CDI代表“上下文和依赖项注入”。正如旁注:CDI代表“上下文和依赖项注入”
@Inject @Documents
EntityManager em;