EclipseLinkのJPQL(Glassfishのv3は):構文問題をフェッチ参加しますか?
-
22-09-2019 - |
質問
は、次のような何かをするために使用しています:
select n from NetworkElement n join fetch n.site s where s.active is true
しかし、EclipseLinkはこれについて多くのことを文句を言います:
Caused by: Exception [EclipseLink-8024] (Eclipse Persistence Services - 2.0.0.v20091127-r5931): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Syntax error parsing the query [select n from NetworkElement n join fetch n.site s], line 1, column 49: syntax error at [s].
(スタック上のクエリは上記のものとは異なるが、結果は同じである)
私はさまざまな組み合わせを試してみた、のどれも働いた。
select n from NetworkElement n join fetch n.site where n.site.active is true
select n from NetworkElement n join fetch n.site as site where site.active is true
また、私は多分、私のマッピングが正しくないことを疑う、私のドメインモデルで異なるエンティティに切り替えてみました。それでも、同じ問題ます。
それは私が唯一のクエリヒントを使用して、これを達成できることだろうか?私はそれを行うにはしたくない。
はNetbeans 6.8とGlassFish v3のに同梱されてところで、私はEcliseLinkを使用しています。
私は任意の助けをいただければと思います!
ロドリゴ
解決
主な問題は、JPQLの構文が参加し、EclipseLinkのは、この機能のためのクエリヒントを使用する理由ですフェッチエイリアシングを許容しないということです。エイリアシングを追加するための機能拡張要求はJPQLに直接フェッチに参加し、あなたはそれのためにしてください投票を完了見たい場合があります。 ( https://bugs.eclipse.org/bugs/show_bug.cgi?id = 293775 に)。
- ゴードン・ヨーク
他のヒント
まあ、それは確かに...それはHQLを通じてエイリアシングサポートしているので、それは休止状態で動作し、あなたはJPA Queryオブジェクトに発行HQLに許可されている、1つはJPQLに参加フェッチエイリアスに許可されていないようです。
したがって、私は選択の余地がなかったが、クエリヒントで名前付きクエリに切り替えます。私は永続ユニットのジャーにorm.xmlファイルを追加したので、本当にエンティティクラスであるため、高い冗長性の注釈を持つクエリを宣言好きではない、と次のようでした。
<!-- Fetch network elements -->
<named-query name="fetchNetworkElements">
<query>select n from NetworkElement n</query>
<lock-mode>NONE</lock-mode>
<hint name="eclipselink.join-fetch" value="n.site" />
<hint name="eclipselink.join-fetch" value="n.site.area" />
</named-query>
希望これは、生のJPQLの同じ欠点に苦しんで誰にもいくつかの手がかりを与えます。