привязка нескольких значений в спящем режиме с помощью игровой среды - PullRequest
3 голосов
/ 28 сентября 2010

Я пытаюсь построить запрос в платформе Play, у меня есть

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);

Отношения между кандидатом и школой приведены в связанной таблице.

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

Ответы [ 2 ]

4 голосов
/ 28 сентября 2010

На самом деле я нашел, где проблема - член может быть использован только с одним значением, и он работает нормально.Когда нам нужно использовать несколько значений, лучше всего использовать стандартный 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

1 голос
/ 19 ноября 2010

В Hibernate вы также можете напрямую использовать сам список.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...