一起来学Hibernate--02(hibernate其他API,及映射关系)

1.hibernate其他API

 1.Query

   

   

   

   

   2.Criteria

     

     

     

     

   3.SQLQuery

    

     

     

    2.表的映射关系:

     一对一:建表原则,两种,可以在一方的表中增加一个外键的字段,指向另一方的主键,还有就是直接一方的主键作为另一方的主键。

    一对多:建表原则,在多的一方创建外键指向一的一方

    多对多:建表原则,需要一个中间表,至少需要两个字段作为外键,分别指向多的一方的主键

  对象之间的关系来描述:

  

  配置文件:比如说一个客户有多个联系人

hibernate一对多

 客户映射文件:

联系人映射:

将映射添加到核心配置文件:

测试:

级联操作:

现在是两边关系相互保存对象的相信,如果只有一方来保存行不行呢?现在会报错,

如何才能不报错呢?可以使用cascade来级联保存或者更新,那么这个级联配置要配在哪里呢?我们要找到主控方在哪里,上面保存的是客户,所以客户是主控方,这个配置就要配置在客户那里

如果保存联系人的时候级联客户,那么:

如果两边关系都设置了级联操作,那么进行如下操作会有几条sql语句呢?

如果执行session.save(customer);会有几条sql语句,

如果执行session.save(linkMan2);会有几条sql语句,

级联删除,配置主控方:

双向关联产生多余的sql

如果上面这样操作会有哪条sql是多余的?

分析:首先会执行两条查询的操作,即将客户和联系人都查出来,此时客户的联系人字段是外键需要改成新的联系人id,所以客户的联系人外键变了,和Session缓存忠缓冲区变了,但是快照区没有变,同理,联系人的客户字段作为外键也变了,缓冲区的和快照区的也不一致,所以会有两次update操作。

如果避免这种情况呢?一方放弃外键的维护权就i行了,哪一方放弃维护外键权力呢?举个例子,老师记住每个学生的名字很困难,但是让每个学生记住一个老师的名字很简单,所以一对多关系当中,是一的一方放弃维护外键的权利

配置如下:

 

理解cascade和inverse的区别:

   cascade:强调的是操作一个对象的时候,是否操作其关联的对象

   inverse:强调的是外键的维护权

   

  问题:客户关联的联系人是否保存到了数据库中外键是啥?

 

 

 hibernate多对多:

  

多对多关系怎么配置:

对象上面不用多说,两个实体类都有一个集合属性来存对象的对象,数据库中的表有三张,主要体现多对多关系在映射配置上面:

 

配置:

 

hibernate检索方式

了解hibernate的映射关系后,就要了解hibernate的检索方式

 

1.对象导航图检索方式

   

2.OID检索方式

  

3.HQL检索

 

4.QBC检索

 

5.本地sql检索方式

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时空恋旅人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值