立即加载,外连接,预先抓取的关系--摘抄自"hibernate开发及整合应用大全"

假设有一个类,它有两个属性property1和 property2,则HQL语句"from A as a left outer join a.property1"有一个原则,HQL语句忽略配置文件中的预先抓取策略,这句话有两个意思:

   不管A类对property1在配置文件里是什么策略,(可能是预先抓取,立即或延迟检索,它们都失效),这时都采用HQL指定的左外连接;左外连接必定会初始化property1属性(或对象),但是如果配置文件里对property1的检索策略是延迟加载,A类得不到对property1的引用,为了得到这个引用,需要再次发送一条SQL语句来确立这种引用关系,这种情况在property1为集合时经常出现.

   A类在配置文件中设置的对property2的预先抓取策略将被忽略(不管这个策略是fetch或是select),对propery2有影响的设置是立即和延迟加载,hibernate只看得到这两种策略.所以在使用语句"from A as a left outer join a.property1"时,property2的加载策略将仅由lazy=true或者是lazy=false来决定

在配置文件中设置的检索策略只能影响到session.get()或load()方法,对于使用"Query q = session.createQuery(from A as a left outer join a.property1)"这种指明HQL的方式,将忽略配置文件的预先抓取检索策略

   在"from team t left outer join t.students"语句中,team和students对象配置文件中的预先抓取都将被忽略,因此,HQL忽略配置文件预先抓取策略深度就是在HQL语句中指定的对象,Hibernate对这些对象直接的属性配置忽略预先抓取,而采用立即或是延迟检索的策略,假设身份证还关联其他对象,则这些对象的抓取策略按照配置文件的设定,预先抓取策略不会被忽略,Hibernate仅在第一层关联时忽略配置文件的预先抓取,在更深的层次,按照配置文件设置的策略取得对象

在进行批量操作时(包括更新,删除),最好的方法是调用JDBC的API进行操作

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值