复合uniqueconstraint上的cascade update constraintviolationexception

vjrehmav  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(357)

我将简化这个例子以使大家理解这个想法。我的模型如下所示:项目与工作有很多关系。为了创建连接表,我创建了一个projectjob实体,其中添加了一列“job\u order”。项目引用到projectjob列表的onetomany链接,带有cascadetype.all。
我有一个 UniqueConstraint 在projectjob上,如下所示:

@UniqueConstraint(columnNames = {"project_id", "job_order"}

除非我想重新安排项目中的工作,否则一切都很顺利。基本上,我在服务中翻转订单,确保每个projectjob在列表中都是唯一的job\u顺序,然后保存项目(因为projectjob将级联)。当jpa/hibernate试图刷新事务时会出现问题,因为它试图“逐行”更新,而且很明显,在第一次更新之后违反了uniqueconstraint(即使整批更新都会给出一致的状态)。
奇怪的是,服务调用发生在事务内部,所以我不知道为什么会出现这个错误。有没有办法在unique语句中更新集合的子成员,以便在更新所有子成员之后检查uniqueconstraint,而不是在第一个子成员之后触发?如果没有,我的用例有什么解决方案?

bcs8qyzn

bcs8qyzn1#

您可以尝试使用延迟约束。或者你用 @ManyToMany @OrderColumn List<Job> jobsProject 相反,它会自动为您处理所有这些。

相关问题