我需要一個實體與其他實體的兩個列表關聯 - 含有相同類型的實體兩份名單。它看起來是這樣的:休眠:多個關聯到同一個類
@Entity
public class Course {
private List<Test> preTests;
@OneToMany(cascade= javax.persistence.CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = 「course」)
@OrderBy("testNumber")
public List<Test> getPreTests() {
return preTests;
}
public void setPreTests(List<Test> preTests) {
this. preTests = preTests;
}
private List<Test> postTests;
@OneToMany(cascade= javax.persistence.CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = 「course」)
@OrderBy("testNumber")
public List<Test> getPostTests() {
return postTests;
}
public void setPostTests(List<Test> postTests) {
this. postTests = postTests;
}
}
現在,我還沒有費心去嘗試這種本身因爲它似乎很明顯,休眠就沒有辦法區分哪些Tests
進入preTests
併爲postTests
。糾正我,如果我錯了,但它的唯一信息是與在Test
表的外鍵指向Course
記錄工作,無論是前,後測試將在同一Course
點。 我的下一個想法是創建的Test
明確PreTest
和PostTest
子類,並有一個List<PreTest>
和一個List<PostTest>
,但導致了臭名昭著的「的mappedBy引用一個未知目標實體屬性:課程」的問題,這在休眠要求的人 - 爲那些令我感到驚訝的原因 - 是通過設計來實現的,因此不可能消失。
我現在的想法是使用單獨的連接表來保存兩個協會。我沒有看到爲什麼這不起作用的理由。它也適合我希望將實體定義中的所有顯式SQL(甚至HQL)都保留下來,並抵制強制創建奇怪的組合鍵或者編寫僅反映持久性框架而不是我的對象設計怪癖的代碼。
不過,之前我承諾此過程中,我問任何你是否有一個清晰的解決方案或在這裏我的推理缺陷知道。
在此先感謝。
邁克爾
我給你一個給予好評,因爲它肯定是一個合理的答案,但它屬於下我的願望,以保持實際的SQL/HQL出來的東西,所以我更喜歡我的解決方案,甚至在一個額外的費用幾張桌子和幾乎沒有效率的查詢。 – Michael 2011-06-11 18:20:47