假设我有一个映射的User对象,其中user_id作为主键,而邮件列具有唯一约束。 我希望我的程序只有在不存在的情况下才能将User对象保存到users表。
我可以在插入功能中执行以下操作:
有两个问题:
如果我是对的,我应该怎么做:
答案 0 :(得分:1)
除非你引入如此多的锁定系统变得无法使用,否则你几乎总是有这样的情况。除非您知道这是一个问题,否则您应该专注于优雅地处理唯一约束违规。
答案 1 :(得分:0)
你应该专注于优雅地处理唯一约束违规。
您可以通过捕获将抛出的ConstraintViolationException来执行此操作。如果你想要更具粒度,如果可能发生多个禁忌viilation,你可以这样做:
...
} catch (ConstraintViolationException e) {
if (e.getConstraintName() != null && e.getConstraintName().toLowerCase().equals("the_name_of_your_contraint")) {
// do something, like add an error to be displayed on the UI
}
}
答案 2 :(得分:0)
现在我能做到的独特方式有效:
<sql-insert check="none" callable="true">
{call saveOrUpdate (?, ?, ?, ?, ?)}
</sql-insert>
http://forum.springsource.org/showthread.php?65265-Hibernate-insert-problem
其他选项我无法使其有效:
也许你可以用@SQLInsert Hibernate注释
制作一个“不存在的插入”下一个选项仅适用于编辑实例:
其他选项是使用“使用版本列进行乐观锁定”并在出现并发异常时处理异常。
link:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/transactions.html#transactions-optimistic