1:一对多关系one-to-many
<hibernate-mapping package="com.xaeduask.k_one2many">
<class name="Dept" table="dept">
<id name="deptno" column="deptno">
<generator class="native" />
</id>
<property name="dname" column="dname" />
<property name="loc" column="loc" />
<!--
set有2个作用:
1. 表示另外一张表
2. set指定的属性,不是映射列,而是映射表!
在双向一对多的情况之下,有多余的sql语句,也只能让一的一方放弃关系的维护!
1. 什么是维护关系: 为外键列加值,修改外键列的值,把外键列的值改为null.
(注意,维护关系,从来不会引起一个新行的增加,旧行的删除)
2. 为什么要使用inverse: 节省sql语句,提高效率,如下,双方都维护关系时,就会产生多余的sql语句!
3. 有外键方永远不能放弃对关系的维护,所以many-to-one元素无法添加inverse
-->
<set name="emps" table="emp" inverse="true" >
<key column="deptno" />
<one-to-many class="Emp" />
</set>
</class>
</hibernate-mapping>
2:多对多
当表中关系是多对多关系时,就会引起第三张表,(当Set出现时)set代表的就是第三章表;
<hibernate-mapping package="com.xaeduask.l_many2many">
<class name="Teacher" table="teacher">
<id name="tid" column="tid">
<generator class="native"></generator>
</id>
<property name="tname" column="tname" />
<!--
set出现,就代表另外一张表
a. set搭配one-to-many,就表示只有2张表, set代表的表就是对方
b. set搭配many-to-many,就表示有3张表, set代表的表就是关系表
-->
<set name="students" table="t_s" >
<!--
key:
a. 表示一个列
b. 是一个外键列,直接依赖于本方的主键
-->
<key column="tid" />
<!--
many-to-many
a. 表示一个列
b. 是一个外键列,依赖于class属性引出的对方的主键
c. 还能引出对方,靠的还是class属性
-->
<many-to-many column="sid" class="Student" />
</set>
</class>
</hibernate-mapping>
在双向多对多时必须有一方放弃关系维护,因为在添加的时候会出现重复值问题
3:cascade级联操作
当子配置中配置了cascade=”save-update”
在添加部门时,员工就会自动级联保存;
cascade=”delete”:支持级联删除操作;
cascade=”all”:支持所有级联操作;
4:一对一
1.基于外键
a.单向一对一 只写
b.自己编写2表连接sql.复习2表连接时的条件应该如何写!
c.不维护关系,使用该元素主要是为了能获取出对方!
property-ref属性对生成sql语句的影响!
2.基于主键
<hibernate-mapping package="com.gao.domain">
<class name="com.gao.domain.Husband">
<id name="id">
<generator class="foreign">
<param name="property">wife</param>
</generator>
</id>
<property name="name" />
<one-to-one name="wife" class="Wife" cascade="save-update" constrained="true" />
</class>
</hibernate-mapping>
<hibernate-mapping package="com.gao.domain">
<class name="Wife">
<id name="id">
<generator class="native" />
</id>
<property name="name" />
<one-to-one name="husband" class="Husband" />
</class>
</hibernate-mapping>