我正在使用Hibernate 4.0.1.Final。我有一個唯一約束列的表...我可以讓Hibernate根據一個唯一的列約束來替換一個對象嗎?
@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根據獨特的列保存或替換對象,還是需要先搜索對象,如果它存在,請將其刪除,然後重新插入對象?
關於「DUPLICATE KEY UPDATE」語法,它可以模仿MySQL的REPLACE INTO語法 - http://dev.mysql.com/doc/refman/5.0/en/replace.html?那最終是我想要做的。我試着把「REPLACE」sql語句放入@SQLInsert註釋中,但是得到一個錯誤,說Hibernate沒有識別出「REPLACE」標記。 – Dave
看看 - http://stackoverflow.com/questions/11235501/mysql-insert-row-on-duplicate-key-update-multiple-columns @Dave – Dedawn