HQL неожиданный узел AST: {вектор}
Я пытаюсь написать запрос HQL, чтобы захватить список пользователей, принадлежащих к определенной организации, или любого франчайзи из списка франчайзи, однако hibernate не в состоянии проанализировать его. Не могу понять почему. Вот HQL:
from User u where
(u.parentOrganisation = :topLevelOrganisation or u.parentOrganisation in :franchisees)
and u.parentOrganisation.deleted = false
and u.active = true
это ошибка, которую hibernate выплевывает:
unexpected AST node: {vector} [from com.myapp.User u where (u.parentOrganisation = :topLevelOrganisation or u.parentOrganisation in :franchisees0_, :franchisees
1_, :franchisees2_) and u.parentOrganisation.deleted = false and u.active = true]. Stacktrace follows:
Message: unexpected AST node: {vector} [from com.myapp.User u where (u.parentOrganisation = :topLevelOrganisation or u.parentOrganisation in :franchisees0_, :fr
anchisees1_, :franchisees2_) and u.parentOrganisation.deleted = false and u.active = true]
если я достану or u.parentOrganisation in :franchisees
- чуть, так что мой запрос выглядит так:
from User u where
(u.parentOrganisation = :topLevelOrganisation)
and u.parentOrganisation.deleted = false
and u.active = true
тогда он работает нормально. Что не так с моим синтаксис? Почему hibernate жалуешься на лишний пункт?
2 ответов
о, оказывается, мне нужно было вложить :franchisees
в скобках:
from User u where
(u.parentOrganisation = :topLevelOrganisation or u.parentOrganisation in (:franchisees))
and u.parentOrganisation.deleted = false
and u.active = true
мы можем разделить условие " или " в HQL на 2 оператора.
Он работает нормально.
from User u where
(u.parentOrganisation = :topLevelOrganisation and u.parentOrganisation.deleted = false
and u.active = true )
or (u.parentOrganisation in (:franchisees) and u.parentOrganisation.deleted = false
and u.active = true)