JPA,独立应用程序和实体管理器

时间:2016-08-04 11:06:26

标签: java jpa

我正在开发一个应该在我的电脑上运行的应用程序,它应该在mysql数据库中检索一些数据后进行一些操作。
我使用Netbeans 8.0.2上的向导创建了实体类和jpa控制器类,现在我将在Main.java中使用这些类来检索单个对象。
为什么我会在NullPointerException / EntityManager上收到EntityManagerFactory? 原始文件的开头如下:

public class TestJpaController implements Serializable {

    public TestJpaController(EntityManagerFactory emf) {
        this.emf = emf;
    }
    private EntityManagerFactory emf = null;

    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }
}

问题是我如何通过EntityManagerFactory我找到了@PersistenceContext我应该解决的地方,所以我修改了代码:

public class TestJpaController implements Serializable {
    @PersistenceContext(unitName = "TestPU")
    private EntityManagerFactory emf;
    private EntityManager em ;
    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }
}

我的错误在哪里?

我正在使用:JDK 1.7,JPA 2.1,正如我已经写过的,Netbeans 8.0.2

Main.java中的代码行是:

TestController tc= new TestController();
Test t= tc.findTest(1);

其中1是我知道存在的ID! 由向导自动创建的方法findTest()为:

public Test findTest(Integer id) {
    EntityManager em = getEntityManager();
    try {
        return em.find(Ordine.class, id);
    } finally {
        em.close();
    }
}

并且在@Shashi的回答之后,问题出现在em.close();上!

我正在阅读这篇文章: http://www.oracle.com/technetwork/articles/java/persistenceapi-135534.html 我会添加一些我的persistence.xml:        org.eclipse.persistence.jpa.PersistenceProvider     测试

我忘记了另一件小事......我发现了在dbistence中重新创建db模式的属性,但是,幸运的是,它并没有发生! 它有用吗?

2 个答案:

答案 0 :(得分:1)

EntityManagerFactory 调用ConnectionInstanceManager类。希望这会起作用

public class ConnectionInstanceManager {

private static EntityManagerFactory entityManagerFactory = null;
private static EntityManager entityManager = null;
private static EntityTransaction entityTransaction = null;


public ConnectionInstanceManager() {
    // TODO Auto-generated constructor stub
}
public static void createConnectionInstance(){

    entityManagerFactory = Persistence.createEntityManagerFactory("jpaservices");
    entityManager = entityManagerFactory.createEntityManager();
    entityTransaction = entityManager.getTransaction();

}
public static void destroyConnectionInstance(ConnectionInstanceManager connectionInstanceManager){
    ConnectionInstanceManager.entityManagerFactory= null;
    ConnectionInstanceManager.entityManager= null;
    ConnectionInstanceManager.entityTransaction = null;
}
public ConnectionInstanceManager getConnectionInstance(){
    createConnectionInstance();
    return ConnectionInstanceManager.this;

}
public EntityManagerFactory getEntityManagerFactory(){
    return entityManagerFactory;
}
public EntityManager getEntityManager(){
    return entityManager;
}
public EntityTransaction getEntityTransaction(){
    return entityTransaction;
}

public ConnectionInstanceManager getConnectionInstanceforfetch(){
    fetchConnectionInstance();
    return ConnectionInstanceManager.this;

}
public static void fetchConnectionInstance(){

    entityManagerFactory = Persistence.createEntityManagerFactory("jpaservices");
    entityManager = entityManagerFactory.createEntityManager();
    entityTransaction = entityManager.getTransaction();


}

}

答案 1 :(得分:0)

我用原始文件解决了! 我想,问题在于导入jar:最初我添加了Glassfish的文件来管理持久性的依赖;现在我下载最后一个版本的eclipse链接,然后导入这些文件!

相关问题