使用@PersistenceContext注入EntityManager

时间:2019-03-28 08:19:04

标签: hibernate jpa

我们当前正在使用EntityManager的问题设置,如下所示。对于实体管理器,我们希望从@PersistenceUnit更改为@PersistenceContext。我们如何使用相同的@Inject机制?

persistence.xml:

<persistence-unit name="my-data-source" transaction-type="JTA">
    <jta-data-source>java:/foo/model</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
        <property name="hibernate.show_sql" value="${hibernate.show_sql:false}"/>
        <property name="hibernate.format_sql" value="true" />
        <property name="hibernate.use_sql_comments" value="true" />
        <property name="hibernate.order_inserts" value="true" />
        <property name="hibernate.order_updates" value="true" />
        <property name="hibernate.jdbc.batch_versioned_data" value="true" />
        <property name="hibernate.jdbc.batch_size" value="30" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL57InnoDBDialect" />
    </properties>
</persistence-unit>

这就是我们获取实体经理的方式:

@Stateless
public class EntityManagerProvider {

    @PersistenceUnit(unitName = "my-data-source")
    private EntityManagerFactory emFactory;

    @Produces
    @Default
    public EntityManager getDefaultEntityManager() {
        return emFactory.createEntityManager();
    }

}

在应用程序中,我们像这样注入实体管理器:

@Inject
private EntityManager entityManager;

2 个答案:

答案 0 :(得分:1)

我认为您当然可以这样调用,而无需调用EntityManagerFactory:

@PersistenceContext
EntityManager em;

在这种情况下,容器将处理实体管理器bean的生命周期,因此您无需调用EntityManagerFactroy。

答案 1 :(得分:1)

您的代码就像下面这样:

@PersistenceContext
private EntityManager entityManager;

以下是导入的内容:

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

有关更多信息,请检查this answer