标签:hibernate
1.一对多
主表:省份表--province 从表:城市表--city
City.hbm.xml:
<many-to-one name="provnice" class="com.ming.hibernate.dao.Provnice" update="false" insert="false" fetch="select"> <column name="PID" precision="22" scale="0" not-null="true" unique="true" /> </many-to-one> <!--name="province" 与City类的属性名字相同 class="" 主表的类,用于存储one一方的数据 1、当lazy="true" fetch = "select" 的时候 , 这个时候是使用了延迟策略,开始只查询出一端实体,多端的不会查询,只有当用到的时候才会发出sql语句去查询 ; 2、当lazy="false" fetch = "select" 的时候 , 这个时候是使没有用延迟策略,同时查询出一端和多端,同时产生1+n条sql. 3、当lazy="true"/lazy="false" fetch = "join"的时候,这个时候延迟已经没有什么用了,因为采用的是外连接查询,同时把一端和多端都查询出来了,延迟没有起作用。 -->
Province.hbm.xml
<set name="cities" inverse="false" cascade="all"> <key> <column name="PID" precision="22" scale="0" not-null="true" /> </key> <one-to-many class="com.ming.hibernate.dao.City" /> </set> <!--name="cities" provnice类中的属性名字 inverse="true" 控制反转,主表控制从表,从表主动记录主表的数据(多的一方记录一的一方数据) cascade="all" 级联 save update delete都适用 "saveorupdate" save update适用 "delete" delete适用 -->
2.多对多
学生表:student 教师表:teacher
TbStudent.hbm.xml:
<set name="tbTeachers" inverse="false" table="TB_TEACHER_STUDENT" schema="HIBERNATE" cascade="all"> <!-- 设置二级缓存 默认不支持集合缓存--> <cache usage="read-only"/> <key> <column name="SID" precision="22" scale="0" not-null="true" /> </key> <many-to-many entity-name="com.ming.hibernate.dao.TbTeacher"> <column name="TID" precision="22" scale="0" not-null="true" /> </many-to-many> </set> <!--schema="HIBERNATE" 数据库用户名-->
TbTeacher.hbm.xml
<set name="tbStudents" table="TB_TEACHER_STUDENT" schema="HIBERNATE" cascade="all"> <cache usage="read-only"/> <key> <column name="TID" precision="22" scale="0" not-null="true" /> </key> <many-to-many entity-name="com.ming.hibernate.dao.TbStudent"> <column name="SID" precision="22" scale="0" not-null="true" /> </many-to-many> </set>
3.缓存策略
详见 http://www.cnblogs.com/xiaoluo501395377/p/3377604.html
本文出自 “ming” 博客,请务必保留此出处http://8967938.blog.51cto.com/8957938/1696217
标签:hibernate
原文地址:http://8967938.blog.51cto.com/8957938/1696217