gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:37:19 25 4
gpt4 key购买 nike

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

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 测试

我忘记了另一件小事...我找到了将数据库模式重新创建到 persistence.xml 中的属性,但幸运的是,它没有发生!有用吗?

最佳答案

调用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();


}

}

关于java - JPA,独立应用程序和实体管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38765632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com