【问题标题】:Can I make Hibernate replace an object based off a unique column constraint?我可以让 Hibernate 根据唯一列约束替换对象吗?
【发布时间】:2012-06-26 19:44:38
【问题描述】:

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

@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 根据唯一列保存或替换对象,还是我需要先搜索对象,如果存在则删除它,然后重新插入?

【问题讨论】:

    标签: hibernate replace save unique-constraint


    【解决方案1】:

    我认为您是正确的,但与您尝试做的最接近的事情记录在这里 - Can Hibernate work with MySQL's "ON DUPLICATE KEY UPDATE" syntax?

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

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

    【讨论】:

    猜你喜欢
    • 2013-02-21
    • 2011-03-18
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    相关资源
    最近更新 更多