JPA PersistenceUnit vs Persistence

时间:2014-03-17 07:18:09

标签: java jpa

我创建了JPA项目,并在glassfish v4上部署如下:
 班级 -

package com.jpa.model;
class Lookup {
    private int id;
    private int label;

    .... [set/get methods]
}


 META-INF / persistence.xml中

<?xml version="1.0" encoding="UTF-8" ?>
    <persistence version="2.1" ... ">
    <persistence-unit name="dbUnit" transaction-type="JTA">
    <jta-data-source>jdbc/MYSQL_DB</jta-data-source>
    <class>com.jpa.model.Lookup</class>
</persistence-unit>
</persistence> 

EntityManagerUtil

public class EntityManagerUtil {
@PersistenceUnit(name="dbUnit")
protected static EntityManagerFactory entityManagerFactory;

public static void getAllLookups(){
    System.out.println("entityManagerFactory : "+entityManagerFactory);// always print null
    System.out.println(Persistence.createEntityManagerFactory("dbUnit").createEntityManager().createQuery("SELECT L FROM Lookup L"));// always return correct values
}
}


--------------------------------------
当我尝试调用@PersistenceUnit时,返回始终为null 但是当我尝试使用Persistence.createEntityManagerFactory时,它总是返回正确的值
请你的建议&amp;评论。

1 个答案:

答案 0 :(得分:0)

依赖项的注入仅适用于以下托管组件:EJB和Servlet。如果要使用依赖项注入,则必须将EJB的注释添加到类EntityManagerUtil。我执行此操作然后您必须删除变量static的{​​{1}}修饰符和方法entityManagerFactort

如果您正在编写Web应用程序,则可以使用EJB 3.1,因为您将在Glassfish v4上部署它。

也许本教程可以帮助您清除一些想法:https://netbeans.org/kb/docs/javaee/javaee-entapp-ejb.html