Hibernate4註解詳解之多對多物件對映

2021-06-29 12:28:54 字數 1376 閱讀 2195

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的同學們...