我正在尝试保存对分离实体所做的数据库更改。 实体的对象通过参数传递给函数(命名为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。 但是在成功完成提交后,我没有看到数据库中的任何更改。 错误在哪里?
答案 0 :(得分:1)
由于您没有保存新实体(来自您的评论),因此您无需拨打persist()
。
此外,在调用merge()
后,我没有看到任何理由进行“更改”,因此我在做出这些更改后致电merge()
。
所以,请尝试以下方法:
em.getTransaction().begin();
...some changes to data object...
em.merge(data);
em.flush();
em.getTransaction().commit();
同样非常重要:如果您重用EntityManager
变量中的ThreadLocal
,您应该处理失败的过去交易(至少清除它+可能关闭它)。此外,如果错误仍然存在,请尝试重新创建entityManager。