Hibernate持久化不正确的值

时间:2018-04-04 21:35:30

标签: postgresql hibernate jpa hibernate-mapping

我有一些针对Postgres 9.5 DB运行的Hibernate代码,看起来大致如下(匿名) -

Integer myEntityId = myEntity.getId();
getCurrentSession().evict(myEntity);
myEntity.setId(null);
MyEntity clonedMyEntity = (MyEntity)getCurrentSession().merge(myEntity);
myEntity.setMyBooleanField(false);
getCurrentSession().save(myEntity);

我有一个具有大量字段的实体myEntity。我想创建一个记录的副本,只更改了1个字段值。为实现此目的,我从会话中逐出实体,将主键设置为null,将其合并回会话,设置我想要更改的字段,然后将实体保存到DB。但是,此代码(一段时间内正常工作)现在无法正常工作。它看到我试图修改的布尔字段的值不正确 - 结果违反了一些数据库约束。请帮我解决这个问题或建议一个更好的方法来实现我的目标。

1 个答案:

答案 0 :(得分:0)

错误发生时不是添加此记录,而是添加另一条记录到审计表,由添加此记录触发。一位同事建议我使用Eclipse Breakpoint视图并在那里使用add breakpoint选项并选择ConstraintViolationException类 - 这有助于我查看触发器失败的错误以及为什么并相应地修改数据以适应数据库约束。