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)