我们当前正在使用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;
答案 0 :(得分:1)
我认为您当然可以这样调用,而无需调用EntityManagerFactory:
@PersistenceContext
EntityManager em;
在这种情况下,容器将处理实体管理器bean的生命周期,因此您无需调用EntityManagerFactroy。
答案 1 :(得分:1)
您的代码就像下面这样:
@PersistenceContext
private EntityManager entityManager;
以下是导入的内容:
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
有关更多信息,请检查this answer