3.多對多(在多對多的使用上,建議使用表間關聯方式,使用外來鍵關聯冗餘資料較為嚴重)
1.1多對多外來鍵關聯
test和subtest的id為auto_increment
test.class
@onetomany(cascade=cascadetype.all,fetch=fetchtype.eager)
@joincolumn(name="eee")
public listsubtests;
@onetomany(fetch=fetchtype.eager,cascade=cascadetype.all)
@joincolumn(name="ddd") //預設不填joincolumn會自動生成乙個外來鍵字段
private listtests;
多對多的外來鍵關聯在兩者間都採用onetomany的標籤註解,然後使用joincolumn。
1.2多對多表間關聯
test和subtest的id為auto_increment
test
@manytomany(cascade=cascadetype.all,fetch=fetchtype.eager)
@jointable(name="dog",joincolumns = ,
inversejoincolumns =@joincolumn(name = "bcd"))
public listsubtests;
subtest
@manytomany(fetch=fetchtype.eager,cascade=cascadetype.all)
@jointable(name="dog",joincolumns = ,
inversejoincolumns = )
private listtests;
綜合上述幾種配置,當我們在考慮一對一的情況下應當使用主鍵關聯,一對多的情況在外鍵關聯和表間關聯都可做選擇,如果使用外來鍵關聯,則對於test物件新增的list資料,不應當重複add相同的subtest物件,因為hibernate只會當做一條資料來進行插入,如果確實是test所擁有的subtest物件有相同的情況,應該先new再add。這是外來鍵關聯不好的地方,也因此,在subtest表中會出現冗餘的資料(多個相同物件包含的外來鍵不同而已)。而如果使用表間關聯,則list可對同乙個subtest對相進行重複新增,而在處理上不會再subtest表上insert多條資料,只會在關係表上insert多條資料。然而在一對多的情況下建立表間關聯,當我們使用jointable的時候,因為通常hibernate在建表時會要求有主鍵,因此在關係表上bcd欄位(subtest的外來鍵約束字段)為主鍵,就無法產生相同的資料。這是乙個問題。目前我還在測試當中。多對多的情況,我會建議使用表間關聯,因為外來鍵關聯的冗餘資料問題比較嚴重。(特殊情況可考慮外來鍵關聯)
hibernate4之配置檔案
hibernate配置檔案 hibernate 配置檔案主要用於配置資料庫連線和 hibernate 執行時所需的各種屬性 每個 hibernate 配置檔案對應乙個 configuration 物件 hibernate配置檔案可以有兩種格式 hibernate.properties hiberna...
HIBERNATE4原始碼編譯
git gradlew.bat assemble 可跳過測試,否則執行gradlew.bat build的過程中,遇到test出錯會報錯退出 本以為會順利結束,沒想到又報錯了。是符號無法識別轉換的錯誤。在網上搜尋了一番,這個跟系統的區域設定有關。需要改為 英語 英國 我試了英語 美國 居然還是報錯。...
osgi 環境下 hibernate 4 配置
準備將公司的老應用遷移到osgi karaf平台上。很 的一點就是hibernate。這玩意,真是超級麻煩的乙個工程。classload是最頭痛的乙個問題。在hibernate4上利用註冊服務的方式 實現了 classloader的 順便提一句想用hibernate3做reloadclass的同學們...