由于多对多的性能不佳(由于引入了中间表,一次读取操作需要反复数次查询),因才在设计中应该避免大量使用。同时,在多对多关系中,应根据情况,采取延迟加载机制来避免无谓的性能开销。
<?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
王永庆 阅读(140)
评论(0) 编辑 收藏 所属分类:
HIBERNATE