【发布时间】:2012-10-15 14:48:31
【问题描述】:
我正在使用 JPA 框架来实现信息的数据库持久性。
这就是我使用我创建的类的方式:
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 is already active 异常,同样的代码在没有 Servlet 的情况下也能完美运行,我的意思是在测试中使用 main 方法class 它运行起来像魅力,但是在 Servlet 中运行时会抛出异常。
请帮帮我............ ;( 提前致谢, 安库尔
【问题讨论】:
-
如果你的交易失败了,那么你的逻辑就会崩溃,因为 txn 仍然是活跃的