我想在現有項目上評估JPA。數據庫模型和java類存在並且通過自生代碼映射。數據庫模型和java類不能完美地結合在一起 - 但自定義映射效果很好。儘管如此,JPA的使用似乎值得一試。JPA使用連接表的JPA一對多單向關係
正如你所看到的,我是JPA的新手,必須使用xml配置完成工作。目前我正在使用連接表(請不要在此討論此szenario)處理一對多單向關係。
A (one - relationship owner) <-> AB (JoinTable) <-> B (many)
的表格看起來像這樣
A
--
ID
BREF
...
B
--
ID
...
AB
--
A_BREF (foreign key to a reference column in A which is NOT the id)
B_ID
我想定義爲A類
class A {
private List<B> bs;
}
單向的一對多的關係,這樣做是這樣的:
<one-to-many name="bs">
<join-table name="ab">
<join-column name="a_bref">
<referenced-column-name name="bref" />
</join-column>
<inverse-join-column name="b_id">
<referenced-column-name name="id" />
</inverse-join-column>
</join-table>
</one-to-many>
Althoug th是不強制一個錯誤,它不工作。問題在於連接表不適用於A的ID列。對於選擇「B」實體的查詢使用A.ID
列值而不是A.BREF
列值來選擇實體。
(How)我可以使這個映射工作(我使用eclipselink 2.2.0)?
感謝您的任何建議!
編輯:
看着@ SJuan76答案提供的鏈接後,我稍微修改了我的映射
<one-to-many name="bs">
<join-table name="ab">
<join-column name="a_bref" referenced-column-name="bref" />
<inverse-join-column name="b_id" referenced-column-name="id" />
</join-table>
</one-to-many>
現在,這將導致以下錯誤(與EclipseLink的2.1測試。 0和2.2.0)
eclipselink 2.1.0
異常描述:參數名稱 [BREF]在查詢的選擇標準 不匹配在查詢中定義的任何參數 名稱。
的EclipseLink 2.2.0
異常描述:參考 列名[BREF]映射到 元素[字段BS]不 對應於有效的字段上 映射參考。
順便說一句 - 如果我從定義中刪除referenced-column-name="bref"
我得到了referenced-column-name="id"
逆連接列元素在同一個例外。所以我懷疑我已經明白referenced-column-name
是正確的。我用它來指定與連接表相關的表的數據庫列名。它是否正確?
SOLUTION:
我SZENARIO最後的錯誤是,我沒有足夠的BREF場在我班上
class A {
private long bref; // missing !
private List<B> bs;
}
,在我這個類orm.xml
映射文件definied
<basic name="bref">
<column name="bref" />
</basic>
我是n不知道我必須在我的映射類的某處定義使用的連接映射referenced-column-name
屬性(因爲我也沒有將連接表本身或映射到類或類的連接列/反連接列的屬性name
成員)。
此外,檢查案例問題的提示對我很有幫助。現在我覺得在指定我的映射時非常繁瑣,因爲我用小寫值覆蓋了所有的默認(大寫)映射。由於我的數據庫不區分大小寫,我將使用大寫符號,如果特殊映射需要使用默認值。
+1!
你給出了最後的提示(如果你在屬性mapping_上定義它),所以我會接受你的答案。爲我的問題添加了具體的解決方案。謝謝! – FrVaBe 2011-06-10 15:06:46