4

我正在使用 Hibernate 4.0.1.Final。我有一个带有唯一约束列的表……</p>

@Entity
@Table(name = "cb_contract",
    uniqueConstraints = {@UniqueConstraint(columnNames={"ORDER_ID"})}
)
public class Contract {
    ... 
    @Column(name = "ORDER_ID")
    private String orderId;

目前,如果我尝试使用以下方法保存两个具有相同订单 ID 列值的对象...

protected void saveOrUpdate(Object obj) {
    final Session session = sessionFactory.getCurrentSession();
    session.saveOrUpdate(obj);
}

保存第二个实例时,我收到“org.hibernate.exception.ConstraintViolationException:完整性约束违规:唯一约束或索引违规”异常。有没有一种方法可以让 Hibernate 根据唯一列保存或替换对象,或者我是否需要先搜索对象,如果它存在则删除它,然后重新插入该对象?

4

1 回答 1

2

我认为您是正确的,但是与您尝试做的最接近的事情记录在此处-Hibernate 可以使用 MySQL 的“ON DUPLICATE KEY UPDATE”语法吗?

根据您要执行的操作,如果已经存在具有相同键/约束的记录,我会担心您很乐意覆盖现有记录。

我宁愿完全删除唯一约束,而是为该 orderId 获取具有最大 Id 的约束。这样,您至少可以保留具有该 orderId 的所有合同的备份副本。然而,这显然在内存空间上效率较低。

于 2012-06-26T20:11:24.810 回答