Java 当前没有活动的事务

Java 当前没有活动的事务,java,Java,所以我有这个密码 public static void insert(User user) { EntityManager em = DBUtil.getEmFactory().createEntityManager(); EntityTransaction trans = em.getTransaction(); trans.begin(); try { em.persist(user); trans.commit

所以我有这个密码

public static void insert(User user) {
    EntityManager em = DBUtil.getEmFactory().createEntityManager();
    EntityTransaction trans = em.getTransaction();
    trans.begin();        
    try {
        em.persist(user);
        trans.commit();
    } catch (Exception e) {
        System.out.println(e);
        trans.rollback();
    } finally {
        em.close();
    }
}
但是当我运行时,我得到了这个错误


在调用
回滚()之前,您需要首先检查事务是否处于活动状态

非托管环境习惯用法是:

EntityManager em = emf.createEntityManager();
EntityTransaction tx = null;
try {
    tx = em.getTransaction();
    tx.begin();

    // do some work
    ...

    tx.commit();
}
catch (RuntimeException e) {
    if ( tx != null && tx.isActive() ) tx.rollback();
    throw e; // or display error message
}
finally {
    em.close();
}
有关更多详细信息,请查看hibernate文档

因此,在您的情况下,代码应该是:

EntityManager em = DBUtil.getEmFactory().createEntityManager();
EntityTransaction trans = null;
try {
    trans = em.getTransaction();
    trans.begin();
    em.persist(user);
    trans.commit();
} catch (Exception e) {
    System.out.println(e);
    if (trans != null && trans.isActive())
        trans.rollback();
} finally {
    em.close();
}

post error as code(以代码形式发布错误)此处的服务器似乎缺少某些内容,例如,在此之前您应该发送一些内容。见: