我有兩個實體Person和Preference。兩者之間有很多很多的關係。 人和偏好關係存儲在一個映射表在休眠狀態下重新排列列表中的項目many-many association
CREATE TABLE `person_2_preference` (
`person_id` varchar(32) NOT NULL,
`preference_id` varchar(32) NOT NULL,
`sort_order` int(11) NOT NULL,
PRIMARY KEY (`person_id`,`preference_id`);
一個人有喜好的有序列表,如下圖所示。
<list name="preferences" table="person_2_preference" lazy="true" inverse="false"
cascade="save-update">
<key column="person_id" update="false"/>
<index column="sort_order"/>
<many-to-many class="com.xx.Preference" column="preference_id" />
</list>
在Java類中,我想重新排序在某些情況下,喜好,所以我做了Collections.swap像 Collections.swap(person.getPreferences(),指數,指數++)(我有驗證,以確保指數不超出範圍)
當我保存人 - personDao.saveOrUpdate(人),我得到一個唯一的約束違反異常,因爲主鍵。
我有其他有序的關係是一對多的,使用Collections.swap的重新排序很有效。這是對多關係的限制嗎?感謝您的時間
感謝您的迴應,我不需要做#2有效的做#3?因爲要更新sort_order我需要映射到映射表的類。我試圖避免將一個類映射到這個many2many表,因爲該表沒有任何其他列 – Gowtham
您不需要#2做#3。在#2中使用HQL更新語句,在#3中只更新父對象,即i。即'Person'實例。但是你是對的,對於#2和#3(甚至#1)你都需要一個映射到person_2_preference表的類。我以爲你已經有過這樣的課。不過,我會介紹這門課,因爲它爲您提供了在這裏需要的靈活性。創建這個簡單的類沒有太多的工作。 – Johanna
我有同樣的問題,並解決方案(1)修復它。謝謝! –