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();
    } catch (Exception e) {
        System.out.println(e);
        trans.rollback();
    } finally {
        em.close();
    }
}

但是当我运行时出现此错误

picture

最佳答案

您需要首先检查交易是否处于 Activity 状态,感谢 EntityTransaction#isActive()在调用rollback()之前。

非托管环境的惯用语是:

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();
}

更多详情请查看§5.2.1来自 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();
}

关于java - 目前没有活跃的交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40935512/

相关文章:

java - Spring Boot 1.4 单元测试 Hibernate 验证 WebMvcTest

java - 参数匹配器不验证参数

java - 集合的 Spring Data 规范包含操作

java - 有没有更快的方法将十六进制小数部分转换为十进制?

java - 如何在不知道数组内容的特定子类型的情况下复制数组的内容?

java - 将行映射到多个工作表中的行

java - 如何在 Java 中创建具有相同类型参数的方法?

java - 类中 SwingX 的 JXCollapsiblePane 正在影响该类创建的其他对象中创建的所有其他 Pane

java - Android应用程序TCP/IP命令问题

java - 我们可以使用 Java EE Servlet 作为后端并使用 Angular 作为前端吗?