我在控制台观察一条hql语句生成很多条一样的sql语句。下面是一个例子:
String hql = "from users u  where u.name=?";
它在控制台显示很多 select 列名1,列名2,列名n,列名等等 from users u where u.name =? ;它生成很多sql语句,导致我连接数据库的连接数满了,报连接数满了的错误。

解决方案 »

  1.   

    说明一下,上面写的hql语句是我写的一个例子,主要说明一条hql语句生成很多条一样的sql语句。
      

  2.   


    这个问题不好解决吧,主要问题是Hb外键关联的问题,比如你查找一批用户,比如你又同时查每个用户的一个外键属性(比如用户的角色),在Hb里面表现为一个Class类,那么有可能查询角色时是一个一个查询的,Hb输出的SQL全部是,或许就是你感觉的一样。
    select ... from role where  roleId = ?;
    select ... from role where  roleId = ?;
    select ... from role where  roleId = ?;
    ...但是实际的SQL或许是select ... from role where  roleId = 1;
    select ... from role where  roleId = 2;
    select ... from role where  roleId = 3;
    ...
    所以实际实际查询的SQL不是一样的。但是这些查询都应该是在一个session(也是一个Connection)里完成的,不清楚为什么你的会连接满了,是不是没关闭session?
      

  3.   

    什么意思? 那个SQL的打印没什么 你可以屏蔽掉
    你的数据库连接数满了 和你描述的问题没关系你是在多次执行这个HQL的查询后会链接满掉挤死web应用?
      

  4.   

    lz的sql是不是关联了很多表啊,5楼说的估计有可能
      

  5.   

    如果你频繁使用getSession() 但是又没有释放掉session 并且没有对该业务类加上事务控制session很可能一直没有被释放掉 最终链接满掉了
      

  6.   

    hibernate的控制台中显示多条sql,不一定是生成了多条sql。