@PersistenceUnit注释不起作用

时间:2011-09-20 21:05:27

标签: java hibernate jpa persistence cdi

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

@PersistenceUnit(unitName="primary")


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

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

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

我是否需要在CDI中配置以使注释生效?感谢。

1 个答案:

答案 0 :(得分:2)

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