JPA - 将对象保存在一起

时间:2016-03-01 17:31:36

标签: java mysql hibernate jpa

我有一个实体(javax.persistence)对象有三个字段--A,B和删除。组合(A,B,删除)应该是唯一的。我使用true / null作为删除的值,以便在MySQL中唯一约束保持良好。

假设我已经在db(1,a1,b1,true)中有记录。现在我正在尝试将该记录的已删除更新为null,同时插入一个新对象(2,a1,b1,true)。所以,我的表将事务的结尾看作(1,a1,b1,null),(2,a1,b1,true)。但是,此代码因唯一约束违规而失败。我将此理解为预期的行为,因为在提交事务之前,现有记录将触发违规异常。

有没有办法做我想做的事情而没有抛出异常?

伪代码:

整个事情都在标记为Transactional的方法中。

dbObj = repo.find(..) // returns (1, a1, b1, true) newObj = copyFrom(dbObj) // creates another (a1, b1, true) dbObj.setValid(null) repo.save(dbObj) repo.save(newObj)

1 个答案:

答案 0 :(得分:0)

我建议您按照下面伪代码中的步骤来实现此目的。

1)将有效指标列值的默认值定义为false。

private void saveObject(){
  dbObj = repo.find(..) 
  EntityManager em = emf.createEntityManager();
  EntityTransaction tx = em.getTransaction();
  dbObj.setValid(false);
  tx.persist(dbObj);
  em.flush();

  newObj(a1,b1,true);
  tx.persist(newObj);
  em.flush();

tx.commit();
}
相关问题