-
2004-11-16
hibernate随笔
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://bpnrtech.blogbus.com/logs/499249.html
1.hibernate危机(也是所有持久层解决框架的危机),A.B.C级连时候,如果每次load A同时也load了B,C这样将会时致命的,因为将会有n的SQL语句被执行,n的具体大小看B,C的数量多少。反正将会是一个可怕的数字。
解决办法:
一对多里面的 lazy=true 这样在load A的时候就不在加载B,那么何时来加载B呢?还有C
3种方法
1.在load A 后,当使用A.Bs的时候Hibernate会自动加载所有的B,前提条件是在使用A.Bs时session没有被关闭
这样就必须使用filter,在页面请求结束的时候才关掉单前的session
该方法也是相对实用的
2.使用Hibernate.initialize(set);在load A的时候使用该语句,就会把A的所有B load出来,并不会把C,或责其他A的B也load出来。所以也是可靠的。
3.一般对于大数据量的B时,一般还是使用HQL查询出来的
规则:HibernateCRUD该类应该实现基本的操作(完成对异常的扑获,可能这个不规范?,但是程序清晰),以及扩展功能的操作(分两个,一个扑获异常,一个不扑获异常)
做上面的原因是:在事务里如果需要几个基本操作才能完成,用session的基本操作,只需要一个基本操作的,用HibernateCRUD的操作,这时候HibernateCRUD的扩展操作也成了在事务里的基本操作
注:基本操作,就是在session里直接有的操作,如save,update,find等HibernateCRUD.count(set)
//这句话用来查询set记录的数目,但是set还没有被初始化,就是set里没有值
//这个时候把设置了lazy=true,比如,不想得到set里的所以记录内容,但是要得到
//记录的条数的时候就可以这样做,这样可以不用另外解HQL语句^^,真的很强大啊
//System.out.print(HibernateCRUD.count(set));历史上的今天:
域建模与用例建模:孰先孰后? 2004-11-16Business rules:在OptimalJ中的处理 2004-11-16关于Transaction Script、Domain Model模式讨论 2004-11-16cvs_eclipse配置笔记- - 2004-11-16ant+junit集成测试出现的一些问题总结- - 2004-11-16随机文章:
Hibernate的最佳实践(zz自Reference) 2004-11-16Hibernate的一些小心得 2004-11-16Hibernate的一些小心得 2004-11-16Hibern8IDE HQL Commander窗口的中文问题 2004-11-15在Eclipse 中调用 Hibern8IDE,同时解决中文问题 2004-11-15
收藏到:Del.icio.us







