我将简化这个例子以使大家理解这个想法。我的模型如下所示:项目与工作有很多关系。为了创建连接表,我创建了一个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,而不是在第一个子成员之后触发?如果没有,我的用例有什么解决方案?
1条答案
按热度按时间bcs8qyzn1#
您可以尝试使用延迟约束。或者你用
@ManyToMany @OrderColumn List<Job> jobs
在Project
相反,它会自动为您处理所有这些。