如何在查询中检查是否存在使用HQL的对?

时间:2016-12-08 09:33:38

标签: java hql

我列出了不同的ID及其名称。对于每个id[0],我们需要匹配name[0]

  • ID列表,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]),...};

有什么建议吗?

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)