这个hibernate语句应该怎么写?

cxz7531 2012-08-03 04:41:11
通过别的途径知道了几十个userId,想用一套sql语句取出所有的userName。

如果是 select * from user where userId=? 一次只能一条
如果是 select * from user where userId in (?,?,?,?),则sql很长,且?个数不确定
...全文
156 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxz7531 2012-08-04
  • 打赏
  • 举报
回复
奇怪,我明明结完贴了,怎么显示得分都是0
cxz7531 2012-08-03
  • 打赏
  • 举报
回复
2楼的的办法是可行的,谢谢了
brightyq 2012-08-03
  • 打赏
  • 举报
回复
比如:

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();
nickycheng 2012-08-03
  • 打赏
  • 举报
回复
只有这种办法。 什么sess.createQuery最后出来的sql还是一样的in、拼id。
cxz7531 2012-08-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

Java code

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", name……
[/Quote]

这个我试一下
chenghao8622895 2012-08-03
  • 打赏
  • 举报
回复
分开执行不可以吗?先把所有的userid查出来放到集合里面,然后在遍历用逗号拼接字符串放到select * from user where userId in(拼接的字符串)
cxz7531 2012-08-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

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

太长了,而且可读性不好,我本来就是这么搞的。有没有好的办法?

如果从源头上做,肯定是子查询
select * from user where userId in (select * from ddd)的形式,但现在userid是通过别的组件api得到,无法采用这种方式。
噢噢噢噢 2012-08-03
  • 打赏
  • 举报
回复

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();

chenghao8622895 2012-08-03
  • 打赏
  • 举报
回复
你可以把in()里面的参数用逗号分开拼接成一个字符串啊,也就是userId,userId,拼接成字符串放到in里面不就行了吗

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧