對于新系統的設計開發而言,我們應該盡量避免在哭表中引入與業務邏輯相關的主鍵關系。
將業務邏輯主鍵引入庫表,將使得底層庫表結構與業務邏輯相耦合,之后業務邏輯的變化,將很可能對底層數據庫結構產生連帶影響。
復合主鍵的引入,很大程度上意味著業務邏輯已經侵入到數據存儲邏輯之中。因此在新系統的設計過程中,我們應該盡量避免這樣的情況出現。
Hibernate中,通過composite-id節點對復合主鍵進行定義。
對于復合主鍵而言,我們可以通過2種方式確定主鍵:
1>基于實體類屬性的復合主鍵
復合主鍵由實體類中的屬性組成,此時,實體類本身即同事扮演復合主鍵類的角色。
<hibernate-mapping>
<class name="com.wyq.hibernate.TUser2" table="T_User2">
<composite-id>
<key-property name="lastname" column="lastname" type="string"/>
<key-property name="firstname" column="firstname" type="string"/>
</composite-id>
<property name="age" column="age" type="integer">
</property>
</class>
</hibernate-mapping>
Hibernate要求復合主鍵類實現equals和hashcode方法,以作為不同數據之間識別的標志。
主鍵類的加載:我們可以將TUser2類對象本身作為查詢條件進行檢索:
2>基于主鍵類的復合主鍵
我們可以將主鍵屬性獨立到一個單獨的類中。實現方法類似,只不過映射文件的composite-id節點要引入class和name屬性。
posted on 2009-10-27 22:30
王永慶 閱讀(147)
評論(0) 編輯 收藏 所屬分類:
HIBERNATE