日期:2014-05-19  浏览次数:20665 次

每客户端产生一份hibernate实例
每个web登录用户登录成功,均查询A表,假设A表有n条记录,则10个用户登录产生10n个实例,当登录数很多时,或n很大时,内存就用完了,有没有好的解决方法.
这个是用s2sh开发的。
------最佳解决方案--------------------
1 hibernate缓存是干什么用的?

2 N能大到多少?一万?每个用户都需要获知这一万个A的实例吗?如果不需要,为什么不改写HQL,只查询需要的对象?
------其他解决方案--------------------
用了缓存,
## hibernate
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=false
hibernate.format_sql=true
hibernate.hbm2ddl.auto=update

## hibernate cache
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
hibernate.cache.use_query_cache=true
hibernate.cache.use_second_level_cache=true

## C3P0 configuration
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://192.168.50.222:3306/ilp?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
hibernate.connection.username=root
hibernate.connection.password=root
每个用户都是从这表中数据中获取他要的数据,整个表是每个人都用的,但取数据时页面分页显示,每页10条,
这部份代码是用Query query = session.createQuery(hql).setFirstResult(firstResult).setMaxResults(maxResult);感觉应该只生成10个实例,但是实际全部生成了,
------其他解决方案--------------------
Query query = session.createQuery(hql).setFirstResult(firstResult).setMaxResults(maxResult);

1 检查maxResult的实际值
2 一定有地方用的是全表查询。
------其他解决方案--------------------
1、第一个用户登录是查询A表
2、把需要的属性得到,拼接,放入一个类的静态变量中,list或map都行
3、第二个用户或之后的其他用户,不在查询数据库,访问该静态变量
4、根据情况,考虑,是否定期更新该静态变量