Hibernate的一对多、多对多操作

一、一对多操作

    1、一对多映射配置

        第一步:创建两个实体类,客户和联系人

        第二步: Hibernate要求使用set集合表示多的数据。在客户类里面使用

private Set<LinkMan> setLinkMan = new HashSet<LinkeMan>();

//setter,getter   ...

        第三步:在联系人类中

private Customer customer;

//setter,getter ...

        第四步:建立两个基本映射配置文件

        第五步:在客户映射文件,使用set标签表示所有联系人

<!--name属性表示联系人的set集合名称-->

<set name="setLinkeMan">

    <!--Hibernate双向维护外键,column属性值表示外键名称-->

    <key column="clid"></key>

    <!--class里面写联系人实体类全路径-->

    <one-to-many class="cn.itcast.entity.LinkMan">

</set>

        第六步:在客户映射文件。在class标签里面写

<many-to-one name="customer" class="cn.itcast.entity.Customer" coluumn="clid">

</many-to-one>

        第七步:创建核心配置文件

        第八步:测试

        

    2、一对多级联操作

        (1)一对多级联保存:添加一个客户,为这个客户添加一个联系人

        第一步:在测试类里面,事务处理部分,创建客户和联系人对象

....

//开启事务...

//创建客户对象customer

......

//创建联系人对象linkman

......

        第二步:把联系人对象放到客户对象的set集合里面

customer.getSetLinkMan().add(linkman);

        第三步:保存到数据库

session.save(customer);

session.save(linkman);

//提交事务...

.....

        

        另一种写法:

        第一步:在客户映射文件中set标签进行配置    

<set name="setLinkMan" cascade="save-update">

        第二步:创建客户和联系人对象

        第三步:把联系人放到客户里面

        第四步:保存客户到数据库

 

        (2)一对多级联删除:散步某个客户,同时把客户里面的联系人全部删除

        第一步:在客户映射文件里面进行配置cascade为delete

<set name="setLinkMan" cascade="save-update,delete">

        第二步:根据id查询对象,调用session里面的delete方法

//开启事务...

//根据id查询对象

Customer customer = session.get(Customer.class , 3);

//调用方法删除

session.delete(customer);

//提交事务...

 

        (3)一对多修改操作:修改客户的联系人,修改联系人的客户

        第一步:根据id查询lucy联系人,根据id查询百度客户

Customer baidu = session.get(Customer.class,1);

LinkMan lucy = session.get(LinkMan.class,2);

        第二步:设置持久态客户值(持久态自动更新数据库)

baidu.getSetLinkman().add(lucy);

lucy.setCustomer(baidu);

        

        注意:

        因为hibernate双向维护外键,在修改客户时候会修改外键,修改联系人时也修改外键,造成效率问题;

        解决方式:让其中一方不维护外键。一对多里面,让一的那边放弃。在customer配置文件的set标签使用inverse属性。默认false表示不放弃维护。

<set name="setLinkMan" inverse="true">

 

 

二、多对多操作

    1、多对多配置

    第一步:创建实体类,用户和角色

    第二步:让两个实体类互相表示

    (1)一个用户里面表示多个角色,使用set集合

    (2)一个角色有多个用户,使用set集合

    第三步:配置映射关系

    第四步:在核心配置文件中引入映射文件

    第五步:测试

    

    2、多对多级联操作

    (1)级联保存

    第一步:创建多个角色对象,多个用户对象

    第二步:建立关系,把角色放到用户里面

    第三步:保存用户

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值