web-dev-qa-db-ja.com

予期しないHQL ASTノード:{ベクトル}

特定の組織に属するユーザーのリスト、またはフランチャイジーのリストからフランチャイジーを取得するHQLクエリを作成しようとしていますが、休止状態では解析できません。理由がわかりません。 HQLは次のとおりです。

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

これは、休止状態が吐き出すエラーです。

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

その後、正常に動作します。私の構文の何が問題になっていますか?なぜ休止状態はその余分な条項について不平を言っているのですか?

11
rcgeorge23

ああ、:franchiseesを括弧で囲む必要があることがわかりました。

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

これが発生する理由は、配列内のデータが括弧なしでリストに配置されると、リストからデータベースを検索するためのクエリ構文が正しくなくなるためです。

例:

_List<Integer> userIdList = [0, 1, 2, 3]
_

括弧なしのクエリ:_from User u where u.id in :list_

データが挿入されると、次のようになります_from User u where u.id in 0, 1, 2, 3_ --WRONG SYNTAX

括弧付きのクエリ:from User u where u.id in (:list)

データが挿入されると、次のようになりますfrom User u where u.id in (0, 1, 2, 3) --CORRECT SYNTAX

8
Jakov Kusić

HQLの条件「OR」を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) 
1
KenShin