2014-07-03 13 views
5

Belirli bir kuruluşa ait olanların listesini veya franchise alan bir franchise alanın listesini almak için HQL sorgusu yazmaya çalışıyorum ancak hazırda bekletme yapılamıyor o. Nedenini anlayamıyorum. Bu hazırda bekletme tükürür hatadırHQL beklenmedik AST düğümü: {vector}

from User u where 
(u.parentOrganisation = :topLevelOrganisation or u.parentOrganisation in :franchisees) 
and u.parentOrganisation.deleted = false 
and u.active = true 

: İşte HQL olduğunu

Ben or u.parentOrganisation in :franchisees biraz dışarı alırsak
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] 

, yani benim sorgu şuna benzer:

from User u where 
(u.parentOrganisation = :topLevelOrganisation) 
and u.parentOrganisation.deleted = false 
and u.active = true 

Sonra iyi çalışıyor. Sözdizimdeki sorun nedir? Neden bu fazladan madde hakkında şikayette bulunmuyorsunuz?

cevap

22

Oh, ben parantez içinde :franchisees çevrelemek için gerekli çıkıyor:

from User u where 
(u.parentOrganisation = :topLevelOrganisation or u.parentOrganisation in (:franchisees)) 
and u.parentOrganisation.deleted = false 
and u.active = true 
1

Biz HQL 2 ifadeleri de durumun bölünmüş "VEYA" olabilir.

İyi çalışıyor.

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)