1

因此,我正在创建一个搜索功能来查找包含 bookitems 的帖子,其中一个 bookitem 包含具有特定标题的书。

我试过这个查询:

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

其中 books 是 BookItems 的列表,每个 BookItems 包含一本书

如果我从 netbeans 向服务器运行 JPQL,但是当我对 EntityManager 使用相同的查询时,我收到一个异常,即 b.book 之后的 bo 是一个意外符号。但我现在真的不知道该怎么做。

编辑 附加信息:堆栈跟踪:

    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 后尝试使用 fetch 它会打印相同的错误但在 b 而不是 bo

运行 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 回答