我正在使用JPA Framework实现信息的数据库持久性。
这就是我创建此类的方式:
public class ManageConnection {
private static EntityManagerFactory emf = null;
private static EntityManager em = null;
private static String persitenceName="locationtracker";
public static EntityManager getEntityManager(){
if(emf==null || !emf.isOpen())
emf = Persistence.createEntityManagerFactory(persitenceName);
if(em==null || !em.isOpen())
em=emf.createEntityManager();
return em;
}
public static void closeEntityManager(){
if(em!=null && em.isOpen())
em.close()
}
}
然后在我的servlet中,我像这样使用:
public void doPost(blablah){
.
.
.
.
.
.
.
.
.
.
.
for(blah blah){
Manageconnection.getEntityManager().getTransaction().begin();
<PersistenceObject> objName = new <PersistenceObject>();
//properties of the objName to persist
ManageConnection.getEntityManager().persist(<objName>);
Manageconnection.getEntityManager().getTransaction().commit();
}
Manageconnection.closeEntityManager();
}
现在我的问题是,每当我将值传递给Servlet时,我都将获得Transaction已处于活动状态的异常,并且当没有Servlet时,相同的代码也可以正常工作,我的意思是在Test类中使用main方法时,它就像魅力一样运行,但是会抛出异常在Servlet中运行时发生异常。
请帮我..............
;(
提前致谢,
安库尔
最佳答案
您所有的EntityManagerFactory
和EntityManagerFactory
都使用static
。这是类级别,对于ManageConnection
的所有实例。首先,如果创建了ManageConnection
的实例,它将与其他ManageConnection
实例共享。我的建议是尝试不使用static
。
关于java - JPA无交易有效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12898160/