1

そのため、特定のタイトルの本が 1 つの本アイテムに含まれている本アイテムを含む投稿を検索する検索機能を作成しています。

私はこのクエリを試しました:

SELECT p FROM Post p JOIN p.books b JOIN FETCH b.book bo WHERE bo.title LIKE '%hi%'

ここで、books はそれぞれ 1 つの Book を含む BookItems のリストです

そして、netbeans からサーバーに向かって JPQL を実行している場合は機能しますが、EntityManager で同じクエリを使用すると、b.book の後の bo が予期しないシンボルであるという例外を受け取ります。しかし、私は今、他にそれを行う方法を本当に知りません。

EDIT 追加情報: スタックトレース:

    Caused by: Exception [EclipseLink-8025] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Syntax error parsing the query [SELECT p FROM Post p JOIN p.books b JOIN FETCH b.book bo WHERE bo.title LIKE :title], line 1, column 54: unexpected token [bo].
Internal Exception: NoViableAltException(80@[()* loopback of 477:9: (node= join )*])

最初の JOIN の後にフェッチを試みると、同じエラーが出力されますが、bo ではなく b に出力されます

JPQL実行時のコード:

query = em.createQuery("SELECT p FROM Post p JOIN p.books b JOIN FETCH b.book bo WHERE bo.title LIKE :title", Post.class);
query.setParameter("title", "%"+searchString+"%");
posts = query.getResultList();
4

1 に答える 1

1

だから私は自分の質問に答えるつもりです.私は明らかにJOIN FETCHについて間違った考えを持っていて、それがどのように機能するか理解していませんでした. 正しいクエリは

SELECT p FROM Post p JOIN p.books b JOIN b.book bo WHERE bo.title LIKE :title

私はすべてのデータが欲しかったので、JOIN FETCHが指定されたデータのみを選択したことに気づきませんでした。すべてのデータを取得したいので、参加する必要があります。

于 2013-10-10T21:16:21.340 に答える