Привязка нескольких значений в Hibernate с использованием Play Framework
-
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.