我正在使用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中运行时发生异常。

请帮我..............
;(
提前致谢,
安库尔

最佳答案

您所有的EntityManagerFactoryEntityManagerFactory都使用static。这是类级别,对于ManageConnection的所有实例。首先,如果创建了ManageConnection的实例,它将与其他ManageConnection实例共享。我的建议是尝试不使用static

关于java - JPA无交易有效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12898160/

10-14 12:30
查看更多