使用hql访问数据库得到对象后,hibernate会根据你的延迟加载策略,然后再多次访问数据库拿到非延迟加载的对象,看似合情合理。但如果你hql查询的是n个对象,那么hibernate将会进行n*非延迟加载对象个数次查询,效率会很弱,谁有好的解决办法么?
------解决方案--------------------
全部设为延迟加载就是了,用到的 时候再去查库
------解决方案--------------------
这个很靠谱,除非几乎所有情况都需要加载的关联对象,都要设置为lazy。需要加载自己join啊
------解决方案--------------------
全部设为延迟加载就是了,用到的 时候再去查库
你这相当不靠谱,你这样全部写hql是可以,但hibernate getXXX()方法绝对不能用,否则用一次查询一次
这个很靠谱,除非几乎所有情况都需要加载的关联对象,都要设置为lazy。需要加载自己join啊
确实呀,全部延迟加载的话,大部分查询都需要自己写hql join 查询了,这样子运行效率确实靠谱,但编写效率却降低很多,这已经是最优方案了么,不能再折中折中?
懒惰的使用hibernate已经把有些操作变得效率比较低了,比如你只想更新表的一个字段(比如状态),有些人却直接使用session.update,或者entityManager.merge方法,这样效率降低了不少,如果表数据量比较大就会显现的比较明显了。另外比如opensessioninview方式,如果只是几十个人用的小oa还可以考虑,但是用户多的系统,或者网站,这种方式就是不可接受的。使用join编写效率是低了一点,在我看低了一点点而已,但是能确保系统最健康的运行。我从来就是用join的方式。还有更精确一点的方式,比如列表要显示对象某几个属性,并且显示一个关联对象的1个属性,这时应该直接使用select子句,仅查询需要的字段,不需要的就不要查。必须精确控制你的查询,不仅是运行效率的问题,而且还有内存使用的问题。