每个web登录用户登录成功,均查询A表,假设A表有n条记录,则10个用户登录产生10n个实例,当登录数很多时,或n很大时,内存就用完了,有没有好的解决方法.
这个是用s2sh开发的。

解决方案 »

  1.   

    1 hibernate缓存是干什么用的?2 N能大到多少?一万?每个用户都需要获知这一万个A的实例吗?如果不需要,为什么不改写HQL,只查询需要的对象?
      

  2.   

    用了缓存,
    ## 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个实例,但是实际全部生成了,
      

  3.   

    Query query = session.createQuery(hql).setFirstResult(firstResult).setMaxResults(maxResult);1 检查maxResult的实际值
    2 一定有地方用的是全表查询。
      

  4.   

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