天天看點

hibernate注解配置聯合主鍵

有時一個實體的主鍵可能同時為多個,例如下面使用的字典“Dictionary”實體,需要通過dictId 、dictTypeid 和cityId 來查找指定實體,當且僅當dictId 、dictTypeid 和cityId 的值完全相同時,才認為是相同的實體對象。要配置這樣的聯合主鍵,步驟如以下所示。

(1)編寫一個聯合主鍵的類DictionaryPK,代碼如下。

作為符合主鍵類,要滿足以下幾點要求:

1.必須實作Serializable接口。

2.必須有預設的public無參數的構造方法。

3.必須覆寫equals和hashCode方法。equals方法用于判斷兩個對象是否相同,EntityManger通過find方法來查找Entity時,是根據equals的傳回值來判斷的。本例中,隻有對象的dictId 、dictTypeid 和cityId 值完全相同時或同一個對象時則傳回true,否則傳回false。hashCode方法傳回目前對象的哈希碼,生成的hashCode相同的機率越小越好,算法可以進行優化。

(2)通過@IdClass注釋在實體中标注聯合主鍵,實體代碼如下。

标注聯合主鍵時需要注意以下幾個問題。

[email protected]标注用于标注實體所使用主鍵規則的類。它的定義如下所示。

@Target({TYPE}) @Retention(RUNTIME)

public @interface IdClass {

Class value();

}

2.屬性Class表示聯合主鍵所使用的類,本例中使用DictionaryPK 這個聯合主鍵類。

3.在實體中同時标注主鍵的屬性。本例中在dictId、dictTypeid 和cityId 的getter方法前标注@Id,表示聯合主鍵使用這兩個屬性。

(3)這樣定義實體的聯合主鍵後,通過以下代碼便可以獲得指定的實體對象:

參考:

[url]http://www.blogjava.net/relax/archive/2009/09/18/295587.html[/url]

繼續閱讀