hibernate query 映射和Hibernate Query.doc

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
hibernate query 映射和Hibernate Query 导读:就爱阅读网友为您分享以下“映射和Hibernate Query”资讯,希望对您有所帮助,感谢您对92的支持! 1.即时加载: 默认为true,代表加载延时加载策略,当改为false时代表不启用延时加载策略. 在hibernate2中默认为false,但在hibernate3中默认为ture, 在查询中,用对象才查询. 2.延迟加载: 演示对对象的查询,在用对象的时候,才执行操作! 演示对子表的操作,在用对象的时候,才执行操作!(one-to-many父表多条记录) 推荐:对常用字段做lazy=false,集合对象使用lazy=true; 3.预先加载: 演示out-join 4.批量加载: 演示查询子父表,不用批量加载是1+n的关系!用批量加载是1+1的关系! 在one-to-many中!循环读取子表内容时使用. batch-size=quot;5quot;:不推荐使用非常大的值! select * from table where id=1; select * from table where id=2; 转换为 select * from table where id=1 or id=2; 5.List和Iterator 6.inverse:默认为false,默认为关联更新; inverse:默认为false!所以inverse属性默认会进行“关联更新”。 inverse=false————反映;inverse=true————不反映” 当inverse在主表时,inverse为false时! 先执行insert 主,再insert 子,然后再update 子! 当inverse在主表时,inverse为true时! 先执行insert 主,再insert 子. 只对set + many-to-many设置inverse=false,其他的inverse=false。 糟糕的是,不设置inverse属性时,inverse默认为false。 在一对多关系中inverse就更有意义了。在多对多中,在哪端inverse=quot;truequot;效果差不多(在效率上)。但是在一对多中,如果要一方维护关系,就会使在插入或是删除quot;一quot;方时去updatequot;多quot;方的每一个与这个quot;一quot;的对象有关系的对象。而如果让quot;多quot;方面维护关系时就不会有update操作,因为关系就是在多方的对象中的,直指插入或是删除多方对象就行了。让quot;多quot;方维护关系更直观一些。 DEMO SHOW: 1.inverse=quot;falsequot; 主对象包含子对象! User u = new User(); Message message = new Message(); u.getMessages().add(message); session.save(u); sql语句回滚,因为调用了,一条都没有进去! update message set USER_ID=? where id=? (即便加入message.setUser(u),但是仍然回滚!) 2.inverse=quot;truequot; 同上,主控方在从。顺利插入user对象! 会比false少一条sql语句! 如果上面还不懂: 2.5 one-to-many的关系! inverse=quot;falsequot; User u = new User(); session.update(u); 结果 Hibernate: update user set userName=?, passWord=? where id=? Hibernate: update message set USER_ID=null where USER_ID=? 2条sql语句,对父表做的任何动作,都会更新到子表中去! inverse=quot;truequot; User u = new User(); session.update(u); 只有一条sql语句,正常! 3.但是(之前都是没有加cascade=quot;save-updatequot;的情况!) User u = new User(); Message message = new Message(); u.getMessages().add(message); message.setUser(u);// 即便加入这句话! session.save(u); 代码仍然不能插入message!只插入了user对象! 因为你save的是user对象!除非加

文档评论(0)

raojun00007 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档