0

私はJPA (Hibernate)自分のプロジェクトで使用していますがJOIN、間の関係を明示的に設定せずにクエリを作成することはできませんEntities

で同じことをしたことを覚えていTOPLINKます。

クエリ:

例1:

SELECT a FROM 
EntityA a
INNER JOIN EntityB b on b.col1=a.col1
INNER JOIN EntityC c on c.col1=b.col1
LEFT JOIN EntityC c on c.col1=a.col1

エラー:

Unexpected token "on"

例2:

SELECT a FROM 
EntityA a
INNER JOIN EntityB b  
INNER JOIN EntityC c 
LEFT JOIN EntityC c
WHERE b.col1=a.col1 AND c.col1=b.col1 AND c.col1=a.col1

エラー:

       ERROR o.hibernate.impl.SessionFactoryImpl - Error in named query: 


        org.hibernate.hql.ast.QuerySyntaxException: Path expected for join! 
    [SELECT **MY QUERY HERE**]
            at org.hibernate.hql.ast.QuerySyntaxException.convert 
(QuerySyntaxException.java:54)
     ~[hibernate3.jar:na]

        ERROR org.hibernate.hql.PARSER -  Path expected for join!
        ERROR org.hibernate.hql.PARSER -  Invalid path: 'b.col1'
        ERROR org.hibernate.hql.PARSER -  Invalid path: 'c.col1'

もちろん実際の名前ではないので、エンティティ名と列名にはあまり注意を払わないでください:)

御時間ありがとうございます。

4

1 に答える 1

3

モデルに関連付けがない場合、通常の結合は使用できません。実際に関連付けがある場合は、モデルにも追加するのが理にかなっています。

それができない場合は、HQL でクロス結合 (選択リストの値に影響します) を使用できます。

FROM A as a, B as b WHERE b.col1=a.col1

他のアプローチは、ここから見つけることができます。

于 2012-07-27T11:14:26.273 に答える