通过别的途径知道了几十个userId,想用一套sql语句取出所有的userName。如果是 select * from user where userId=? 一次只能一条
如果是 select * from user where userId in (?,?,?,?),则sql很长,且?个数不确定

解决方案 »

  1.   

    你可以把in()里面的参数用逗号分开拼接成一个字符串啊,也就是userId,userId,拼接成字符串放到in里面不就行了吗
      

  2.   


    List names = new ArrayList();
    names.add("Izi");
    names.add("Fritz");
    Query q = sess.createQuery("from DomesticCat cat where cat.name in (:namesList)");
    q.setParameterList("namesList", names);
    List cats = q.list();
      

  3.   


    太长了,而且可读性不好,我本来就是这么搞的。有没有好的办法?如果从源头上做,肯定是子查询
    select * from user where userId in (select * from ddd)的形式,但现在userid是通过别的组件api得到,无法采用这种方式。
      

  4.   

    分开执行不可以吗?先把所有的userid查出来放到集合里面,然后在遍历用逗号拼接字符串放到select * from user where userId in(拼接的字符串)
      

  5.   

    只有这种办法。 什么sess.createQuery最后出来的sql还是一样的in、拼id。
      

  6.   

    比如:Integer userids[] = new Integer[]{1,2,3,.......};
    String hql = "from user as u where u.userId in (:userids)";
    Query query = session.createQuery(hql);
    query.setParameterList("userids", userids);
    List list = query.list();