HIBERNATE中的對象設計
zRoom與User存在一對多的關系,如果要在取得Room的同時取得User,則在Room中加入Set,List或Map類型的集合成員,Set中的元素不可以重復,List中的元素可以重復,Map是鍵值對類型的集合。在HIBERNATE的配置文件中象這樣配置:
<set name="users" table="user" cascade="all" inverse="true" lazy="extra">
<key column="room_id"/>
<one-to-many class="paul.com.User"/>
</set>
<key column="room_id"/>
<one-to-many class="paul.com.User"/>
</set>
- 指定users私有成員的類型為SET:set name="users"
- 指定集合中的對象類型為User:<one-to-many class="paul.com.User"/>
- 指定User對應的表:table="user"
- 指定外鍵:<key column="room_id"/>
- 指定如果同時新增、修改、刪除關聯的Room和User對象時,是否需要HIBERNATE執行兩次操作:cascade="all"
- 指定 lazy="extra"時,則集合中的元素不會被一起取出,而且要讀SIZE時,只會發送一條COUNT的SQL語句至后臺
- 指定 inverse="true"時,當保存一的對象時,對應的多的對象不會同時被保存。
如果要在取得User對象的同時取得Room對象,則在User中加入私有成員Room,在HIBERNATE的配置文件中如下配置:
<many-to-one name="room"
column="room_id"
class="paul.com.Room"
cascade="all"
outer-join="true"/>
column="room_id"
class="paul.com.Room"
cascade="all"
outer-join="true"/>
- 指定名稱為room成員的類型:many-to-one name="room"
- 指定room對應的類名:class="paul.com.Room"
- 指定外鍵:column="room_id"
- 指定如果同時新增、修改、刪除關聯的Room和User對象時,是否需要HIBERNATE執行兩次操作:cascade="all"
- 指定關聯兩個表時的查詢是否使用left-outer關鍵字:outer-join="true"
<set name="servers"
table="user_server"
cascade="save-update">
<key column="user_id"/>
<many-to-many class="paul.com.Server"
column="server_id"/>
</set>
table="user_server"
cascade="save-update">
<key column="user_id"/>
<many-to-many class="paul.com.Server"
column="server_id"/>
</set>
- 指定名稱為servers的私有成員的類型為SET:set name="servers"
- 指定中間表為:table="user_server"
- 指定User表與中間表關聯的外鍵:key column="user_id"
- 指定集合中的對象類型為:many-to-many class="paul.com.Server"
- 指定中間表與Server關聯的外鍵:column="server_id"
- 指定如果同時新增、修改、刪除關聯的Room和User對象時,是否需要HIBERNATE執行兩次操作:cascade="save-update"
如此配置后,將大量減少SQL語句的撰寫。
posted on 2009-05-01 11:57 paulwong 閱讀(440) 評論(0) 編輯 收藏 所屬分類: HIBERNATE