2016-12-08 2 views
1

У меня есть список различных идентификаторов и их имен. Для каждого id[0] у нас есть name[0], который необходимо сопоставить.Как проверить, существует ли пара с использованием HQL в запросе?

  • список идентификаторов, 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 guy, однако один из способов, о котором я могу думать, в вашем hql, вы объединяете id и имя с пространством (или другим специальным символом), а затем с подклассом in. что-то вроде:

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

Параметр pairList представляет собой набор Java, вы должны подготовить перед вызовом запроса HQL, который имеет элемент id[x] + " " + name[x].

Я думаю, что это должно сработать.

Если вы используете спящий режим, другое возможное решение, использовать @Formular аннотации Hibernate на вашем table лица, чтобы создать вычисляемый столбец, такие как:

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

Затем вы можете в HQL использовать его как нормальное поле. подобные ... from table where idNamePair in (:paramList)

Смежные вопросы