【问题标题】:@PersistenceUnit annotation not working@PersistenceUnit 注释不起作用
【发布时间】:2011-09-20 21:05:27
【问题描述】:

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

@PersistenceUnit(unitName="primary")


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

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

我的应用是 CDI 应用。它以前不是 CDI 应用程序 - 我通过在 WEB-INF 中创建 beans.xml 文件将其转换为 CDI,我需要这样做才能执行此类操作。

我需要在 CDI 中配置什么以使注释正常工作吗?谢谢。

【问题讨论】:

  • 你用的是应用服务器,还是tomcat?
  • 我正在使用 JBoss 7。这是一个由 Maven 部署的基本 struts hibernate 项目。我只是添加 CDI 以使此注释正常工作。
  • 我不确定@PersistenceUnit 是否适用于静态字段。我从来没有尝试过。似乎这不是一个好主意。

标签: java hibernate jpa persistence cdi


【解决方案1】:

我有一个仅使用 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 的信息。

【讨论】:

  • 是的,我不知道为什么这个人需要 CDI 才能使用 JPA。我以这种方式在 EJB3 bean 和普通 POJO 对象中使用 JPA,它可以工作。
猜你喜欢
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
  • 2013-09-20
  • 2020-10-09
  • 2012-09-19
相关资源
最近更新 更多