java - @PersistenceUnit 注释不起作用

标签 java hibernate jpa persistence cdi

我想在我的应用程序中使用@PersistenceUnit 注释来创建应用程序管理的 EntityManager

@PersistenceUnit(unitName="primary")


private static EntityManagerFactory entityManagerFactory;        
EntityManager entityManager = entityManagerFactory.createEntityManager();

这似乎不起作用。我通过调试器运行我的代码,发现 entityManagerFactory 为空。我的猜测是使用 @PersistenceUnit 注释注入(inject) Persistence 上下文不起作用。

我的应用是 CDI 应用。它以前不是 CDI 应用程序 - 我通过在 WEB-INF 中创建一个 beans.xml 文件将它转换为 CDI,我需要这样做才能做这样的事情。

我需要在 CDI 中配置什么才能使注释工作吗?谢谢。

最佳答案

我有一个仅使用 Java SE 运行的 JPA 应用程序。我没有 WEB-INF/beans.xml,但我有 META-INF/persistence.xml 配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="JPAPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>jpa.Container</class>
    <class>jpa.Item</class>
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:derby:D:\NetBeansProjects\JPA\jpaTestDB;create=true"/>
      <property name="javax.persistence.jdbc.password" value=""/>
      <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
      <property name="javax.persistence.jdbc.user" value=""/>
      <property name="eclipselink.ddl-generation" value="create-tables"/>
    </properties>
  </persistence-unit>
</persistence>

ContainerItem 是我的 jpa 包中的两个持久化类。

这是由 Netbeans 自动生成的。在持久性章节的官方 (Sun/Oracle) Java EE 教程中也有一些关于在没有 Java EE 的情况下使用 JPA 的信息。

关于java - @PersistenceUnit 注释不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7491766/

相关文章:

java - PowerMock:如何为Mockito执行EasyMock的expectPrivate()?

spring - 在hibernate拦截器中获取http session /请求

java - 使用 Hibernate Criteria API 进行日期比较

java - 如何在 (OpenEntityManagerInView) Web 环境内部和外部使用相同的 DAO?

java - Hibernate - EntityManager 没有持久性提供程序

java - 从 Spring Boot 应用程序源代码生成 ERD 图

java - 如何从 AsymmetricCipherKeyPair 获取 PublicKey,而不是 publickeycipher 参数?

java - Hibernate - 搜索 - Java堆空间

java - 纪念品模式 - 在纪念品中恢复复杂对象(JAVA)

java - 如何在方法中使用类的泛型