可能
tx.begin()引发了异常。这意味着该
catch子句中没有要回滚的活动事务。这就是为什么
tx.rollback()引发另一个异常(隐藏原始错误)的原因。
要查看源异常,请重写您的
catch块:
} catch (RuntimeException re) { log.error("persist failed", re); //moved to top tx.rollback(); throw re;}
@PersistenceContext),另一方面,您是通过
EntityManagerFactory编程方式创建的。
如果这是一个JEE bean,则应如下所示:
@Statelesspublic class TlinkEquipementDAOImpl implements TlinkEquipementDAO { private static final Log log = LogFactory.getLog(TlinkEquipementDAOImpl.class); @PersistenceContext private EntityManager entityManager; public void persist(TlinkEquipement transientInstance) { log.debug("persisting TlinkEquipement instance"); entityManager.persist(transientInstance); log.debug("persist successful"); }//Staff}
此处,事务管理和实体管理器管理由容器(应用程序服务器)处理。
如果在容器外部使用此类,则可能如下所示:
public class TlinkEquipementDAOImpl implements TlinkEquipementDAO { private static final Log log = LogFactory.getLog(TlinkEquipementDAOImpl.class); //I'm assuming getEntityManagerFactory() returnes an already created EMF private EntityManagerFactory emf = PersistenceManager.getInstance() .getEntityManagerFactory(); private EntityManager entityManager = emf.createEntityManager(); public void persist(TlinkEquipement transientInstance) { EntityTransaction tx = entityManager.getTransaction(); log.debug("persisting TlinkEquipement instance"); try { tx.begin(); entityManager.persist(transientInstance); tx.commit(); log.debug("persist successful"); } catch (RuntimeException re) { log.error("persist failed", re); if(tx.isActive()) { tx.rollback(); } throw re; } }//Staff}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)