Привязка нескольких значений в Hibernate с использованием Play Framework

StackOverflow https://stackoverflow.com/questions/3812095

  •  26-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь создать запрос в Play Framework, у меня есть

select * from Candidate c where (:schools member of c.schools) 

После того, как я связываюсь: школа со списком с одним элементом возвращает результат, но если я связываю список с несколькими элементами ничего не происходит.

Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: {vector} [select c from models.Candidate c where (:schools0_, :schools1_ member of c.schools)  group by c.id order by RAND()]

На самом деле мне нужно что-то вроде

select * from candidate where schools in (x,x,x,x,x);

Отношение между кандидатом и школой находится в связанном столе.

Есть ли способ связать несколько значений?

Это было полезно?

Решение

С помощью Hibernate вы также можете использовать непосредственно сам список.

select c from Candidate c join c.schools as school where school.id in (:schools)

Тип: параметр: школ набирается в соответствии с вашими идентификаторами, например List<Int> или List<Long>.

Другие советы

На самом деле я нашел, где проблема - член Может использоваться только с одним значением, и он работает нормально. Когда нам нужно использовать несколько значений, лучше всего использовать стандартный SQL в:

 select c from Candidate c inner join c.schools as school where school.id in (25980,25981)"

Присоединение к подключенным таблицам требуется - мы не можем использовать C.Schools.ID, поэтому нам нужно внутреннее присоединиться к C.Schools с псевдонимами для указания столбца.

Я думаю, что все новички должны проверить http://www.javatx.cn/hibernate/reference/en/html/queryhql.html.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top