2016-12-08 125 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)

相關問題