2016-12-08 85 views
1

我有一个不同的id和他们的名字列表。每id[0]我们有name[0]需要匹配。如何在查询中使用HQL检查对是否存在?

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

有什么建议?

回答

0

我不是hql/sql的家伙,但是我能想到的一种方法是,在你的hql中,你用一个空格(或其他特殊字符)连接ID和名字,然后用in子句连接。是这样的:

select * from table where concat(id, ' ', name) in (:pairList) 

pairList参数是一个Java集合,你应该HQL查询电话,其中有元素id[x] + " " + name[x]之前准备。

我认为这应该工作。

如果使用休眠,另一种可能的解决方案是,让你的table实体使用Hibernate的@Formular注释,创建一个计算列,如:

@Formula(value = " concat(id, ' ', name) ") 
private String idNamePair; 

然后你可以在HQL使用作为一个正常的领域。像... from table where idNamePair in (:paramList)

相关问题