Hibernate(3)【一对多,多对多,cascade,一对一关系】

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值