我列出了不同的ID及其名称。对于每个id[0]
,我们需要匹配name[0]
。
l{1,2,3,4};
n{a,b,c,d};
现在假设我想要获得上述两种组合的完全匹配,是否有任何方法可以在HQL中获得结果?
我希望找到一个像:
这样的查询的替代品select any_column
from table_name
where (id[0]=1 and name[0]=a) or (id[1]=2 and name[1]=b and so on...);
HQL查询应如下所示:
select any_column
from table_name
where (id,name) IN {(id[0],name[0]), (id[1], name[1]),...};
有什么建议吗?
答案 0 :(得分:0)
我不是hql / sql的家伙,但是我能想到的一种方法是,在你的hql中,你用一个空格(或其他特殊字符)连接id和name,然后用in
子句连接。类似的东西:
select * from table where concat(id, ' ', name) in (:pairList)
pairList
参数是一个java集合,您应该在hql查询调用之前准备,该调用具有元素id[x] + " " + name[x]
。
我认为这应该有用。
如果您正在使用hibernate,另一种可能的解决方案是,在@Formular
实体上使用hibernate的table
注释,以创建计算列,例如:
@Formula(value = " concat(id, ' ', name) ")
private String idNamePair;
然后你可以在hql中将它用作普通字段。比如... from table where idNamePair in (:paramList)