hibernate关联关系

映射一对多关联关系

掌握以下知识点:

1.  映射单个自然主键

2.  映射复合自然主键

3.  映射多对一单向关联关系。

4.  映射一对多双向关联关系。

 

映射单个自然主键:  由程序指定主键的值 .

       <id name="empid" type="integer">

            <column name="empid" />

            <generator class="assigned" />

        </id>

映射复合自然主键: 如果在一个表中没有定义 ID 代理主键,而是有两个或者两个以上的字段作为复合主键.

        <composite-id name="id" class="com.test.pojo.WorksId">

            <key-property name="workid" type="integer">

                <column name="workid" />

            </key-property>

            <key-property name="workname" type="string">

                <column name="workname" length="50" />

            </key-property>

        </composite-id>

插入复合主键:

    Works work = new Works();

   WorksId worksId = new WorksId(new Integer(1),"服务员");

   work.setId(worksId);

   work.setWorkdesc("work description");

   session.save(work);

 

查询复合主键:

  WorksId worksId = new WorksId(new Integer(1),"服务员");

  Works work = (Works)session.load(Works.class, worksId);

 

 

 

 

 

 

 

 

以下示例演示了 Adds 类和 person 类为 多对一关系:

Adds.hbm.xml:

     <many-to-one name="person" column="personId"                                               class="com.test.pojo.Person" />

以下代码演示了多对一级联删除:

   Adds adds = (Adds)

   session.load(Adds.class, new Integer(23));

   session.delete(adds);

 

Cascade = “save-update”    级联保存或更新与它关联的对象

Cascade = “delete”          级联删除对象

Cascade = ”all”              级联保存,更新, 删除 与它关联的对象

 

 

 

以下代码演示了 person 类和 Adds 类为一对多关系:

Person.hbm.xml

       <set name="adds" cascade="all"  inverse="true" >

           <key column="personId" not-null="true"/>

           <one-to-many class="com.test.pojo.Adds"/>

        </set>

 

many 方把inverse=”true” 可以提高应用程序的性能.

 

以下代码演示了person 对象 Adds 对象 一对多双向关联:

 

Person person = new Person("wawa, "wawa@sddif.com","23429435", new HashSet());

   Adds adds = new Adds();

   adds.setAddName("bei jin");

   person.getAdds().add(adds);

   adds.setPerson(person);

   session.save(person);

 

以下代码演示了级联删除:

Person person = (Person)

       session.load(Person.class, new Integer(10));

session.delete(person);

 

 

以下示例演示了  Cascade = “all-delete-orphan”  用于解除父子对象之间的关系

演示 Person 对象 Adds 对象做为父子关系

 

 

Person.hbm.xml:

       <set name="adds" cascade="all-delete-orphan">

           <key column="personId"/>

           <one-to-many class="com.test.pojo.Adds"/>

        </set>

 

Person person = (Person)session.load(Person.class, new Integer(32));

   Adds adds = (Adds)person.getAdds().iterator().next();

   person.getAdds().remove(adds);

   adds.setPerson(null);

 

<set> 元素 cascade 属性 取值为”all-delete-orphan”, Hibernate 会按以下方式处理 Person 对象:

1. 当保存对象时 ,相当于 cascade 属性为 “save-update”

2. 当删除对象时, 相当于 cascade 属性为 “delete”

3. 删除相关联的对象.

 

 

 

 

以下代码演示了 Person 对象和 Company 对象是 一对一关系:

Person.hbm.xml

        <one-to-one name="company" class="com.test.pojo.Company"                                                   cascade="all"/>

 

Company.hbm.xml

         <id name="companyid" type="java.lang.Integer">

            <column name="companyid" />

            <generator class="foreign">

               <param name="property">person</param>

            </generator>

        </id>

 

        <one-to-one name="person" class="com.test.pojo.Person"                                    constrained="true"/>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值