由于多對多的性能不佳(由于引入了中間表,一次讀取操作需要反復數次查詢),因才在設計中應該避免大量使用。同時,在多對多關系中,應根據情況,采取延遲加載機制來避免無謂的性能開銷。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.redsage.hibernate.db.entity.TGroup" table="t_group" dynamic-insert="false" dynamic-update="false">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native"></generator>
</id>
<set name="roles" table="t_gourp_role" lazy="false" inverse="false" cascade="save-update">
<key column="group_id"></key>
<many-to-many class="com.redsage.hibernate.db.entity.TRole" column="role_id"></many-to-many>
</set>
</class>
</hibernate-mapping>
1、t_gourp_role為t_group和t_role之間的映射表,它保存了group和role之間的映射關系。
2、一般情況下,cascade應該設置為"save-update",對于多對多邏輯而言,很少出現刪除一方需要級聯刪除所有關聯數據的情況,如刪除一個Group,一般不會刪除其包含的Role,反之刪除Role一般也不會刪除其所關聯的所有Group.
3、映射表中對于t_group表記錄的標示字段。
4、映射表中對于t_role表記錄的標示字段。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.redsage.hibernate.db.entity.TRole" table="t_role" dynamic-insert="false" dynamic-update="false">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native"></generator>
</id>
<set name="groups" table="t_gourp_role" lazy="false" inverse="true" cascade="save-update">
<key column="role_id"></key>
<many-to-many class="com.redsage.hibernate.db.entity.TGroup" column="group_id"></many-to-many>
</set>
</class>
</hibernate-mapping>
posted on 2009-11-04 17:11
王永慶 閱讀(147)
評論(0) 編輯 收藏 所屬分類:
HIBERNATE