我想更新一個Java實體的集合,但Hibernate執行批量更新的順序導致違反約束的異常。 我將使用下面的例子來解釋這種情況。休眠批量更新
實體學生 詮釋ID 字符串名稱 字符串deskID
規則:2個學生不能有相同的辦公桌
月1日的交易:將2名學生如下 學生1 ID:1 名稱: ABC DeskId:D1
學生2 ID:2 名稱:DEF DeskId:D2
現在,在這之後,我決定同時更新學生的實體來交換自己的辦公桌 我發送更新的學生實體的集合冬眠更新 學生1 ID:1個 名稱:ABC DeskId: D2
學生2 ID:2 名稱:DEF DeskId:D1
但是這將導致違反約束的例外,因爲我覺得更新發生在一條記錄在一個時間。
我正在使用JTA實體管理器來管理事務。我的代碼更新看起來像這樣
updateMultiple(Collection<Student> updatedStudents)
for (final Student student: updatedStudents)
{
final Student st= this.entityManager.getReference(Student.class, Student.getId());
student.merge(st);
}
this.entityManager.flush();
return breakClauseDtos;
感謝您的回覆,實際上我的數據模型比這更復雜。一個很好的例子來表示我的問題將是..學生有2個屬性開始日期和結束日期,我對數據庫有一個約束,說沒有2名學生應該有重疊的開始和結束日期...這意味着我們不能有開始日期爲1和結束日期爲4的學生以及開始日期爲2和結束日期爲6 – Priyam
的另一名學生同意建議「從桌面到學生的n:1關係」 –