JPA不是持久化实体

时间:2014-02-17 09:14:20

标签: java hibernate jpa transactions

我正在尝试保存对分离实体所做的数据库更改。 实体的对象通过参数传递给函数(命名为data):

private boolean generate(CommonGameData data) {
        boolean result = true;
        EntityManager em = HibernateUtil.currentEntityManager();
        try {
            em.getTransaction().begin();

            em.merge(data);
            em.flush();
            ...some changes to data object...
            em.persist(data);
            em.flush();
            em.getTransaction().commit();

    } catch (Exception ex) {
        ...
        return false;
    }
        return true;
}

正如我读过的,如果我使用的是分离的实体,我应该首先调用merge。 但是在成功完成提交后,我没有看到数据库中的任何更改。 错误在哪里?

1 个答案:

答案 0 :(得分:1)

由于您没有保存新实体(来自您的评论),因此您无需拨打persist()。 此外,在调用merge()后,我没有看到任何理由进行“更改”,因此我在做出这些更改后致电merge()

所以,请尝试以下方法:

    em.getTransaction().begin();

    ...some changes to data object...
    em.merge(data);
    em.flush();

    em.getTransaction().commit();

同样非常重要:如果您重用EntityManager变量中的ThreadLocal,您应该处理失败的过去交易(至少清除它+可能关闭它)。此外,如果错误仍然存​​在,请尝试重新创建entityManager。