我正在开发一个应该在我的电脑上运行的应用程序,它应该在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模式的属性,但是,幸运的是,它并没有发生! 它有用吗?
答案 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链接,然后导入这些文件!