求助:对于hibernate的困惑

07-03-06 ctm007
小弟是初学者,最近在项目中用到hibernate,发现每次执行一个方法,(方法中包含增或改或查),hibernate总是要加载一次pojo包中的所有bean,还要执行好多的查询,才能执行我的方法,由于加载的class很多,用不了多久tomcat就会抛memory错误,不知道是我的hibernate设置有问题,还是程序写的有问题,希望高手帮忙指点一下。hibernate中所有bean得lazy我都使用的默认的false

banq
2007-03-08 13:21
1. 需要使用lazy为true,配合open session in view。

2. 使用Fetching join等 策略来减少SQL执行次数。

3. 最重要的也是最难的,重新设计你的实体对象,按照Evans DDD来重新分析需求,得出符合对象特征的实体模型,尽量减少关联关系。

hibernate就象日语,好学,但是用好不容易,需要很长探索....

ctm007
2007-03-10 21:27
感谢banq 的回答,我现在把lazy属性都改为true了,但是现在出现了一个问题,开始数据库里面的数据很少的时候程序都好用,可是数据慢慢多了,一执行查询数据库中记录比较多得表中的数据就会抛内存不足的错误,从网上查相关资料,我把java和tomcat的缓存都改大了,可是还是抛同样的错误,错误信息为:系统内存不足。请对大型 ResultSet 使用服务器端游标: Java heap space。ResultSet 大小:2,710,284。JVM 总内存大小:66,650,112。

我的tomcat里面修改的java_opts

JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "

可是我所查询的表中数据不过100多条,应该不至于内存不够啊,查询数据量少点的表程序也不抛错,希望大家能帮忙分析下错误出在哪,session每次我都关闭了,只是在action中所有的对象都放在session里面了,而且每个方法前面我都用request.getSession().setAttrebute("",null);把放在session里面的对象设为null

banq
2007-03-11 09:26
使用方法有问题,配合open session in view来实现,参考:

http://www.jdon.com/jive/thread.jsp?forum=62&thread=22374

猜你喜欢