事务未激活-休眠-JPA

事务未激活-休眠-JPA,第1张

事务未激活-休眠-JPA

可能

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}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5561325.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存