读书人

每客户端发生一份hibernate实例

发布时间: 2012-12-14 10:33:07 作者: rapoo

每客户端产生一份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、根据情况,考虑,是否定期更新该静态变量

读书人网 >J2EE开发

热点推荐