Hibernate HQL:取消引用集合的非法尝试

Hibernate HQL:取消引用集合的非法尝试,hibernate,hql,Hibernate,Hql,情况是这样的: 我有一本实体书,它与章节有一对多的关系 现在,如果我尝试查询“from Book Book internal join Book.chapters chapters where chapter.title,如“%hibernate%””,它会给出所需的结果 但是,如果我尝试“从Book where Book.chapters.title,如“%hibernate%””,我会得到错误非法尝试取消对集合的引用 问题是,我只想要Book对象的集合作为回报,而不是像前一个查询那样得到的一

情况是这样的:

我有一本实体书,它与章节有一对多的关系

现在,如果我尝试查询“
from Book Book internal join Book.chapters chapters where chapter.title,如“%hibernate%”
”,它会给出所需的结果

但是,如果我尝试“
从Book where Book.chapters.title,如“%hibernate%”
”,我会得到错误非法尝试取消对集合的引用

问题是,我只想要Book对象的集合作为回报,而不是像前一个查询那样得到的一对Book和Chapter对象的集合作为回报


有人能帮我理解吗?

章节是书籍中的一个集合,因此不包含属性标题(collection.title)。您需要加入这些章节,以便像第一个示例一样将它们包含在查询中。如果你的章节被懒洋洋地映射,你只会得到一本没有载入章节的书的集合。所以我想说,使用您的第一个查询


如需进一步阅读,请查看和页面。

您可以通过子查询来完成此操作

差不多

from Book book where not exists (from chapter where 
                   chapter.title like '%hibernate%' and chapter.book = book)

(未测试…

是的,可能没问题。出于某种原因,我以为您得到了比您想要的更多的数据。
从book book内部选择book join book.chapters chapters其中chapter.title(如“%hibernate%”)对我来说很好。非常感谢您的回复:)很抱歉我上一条评论中的错误,应该是标题和休眠。是的,我只需要删除重复的对象,我想在从查询中检索的书籍集合上使用类似LinkedHashSet的东西。谢谢:)我想,
book.chapters.title
不再受支持,只用于hibernate的旧版本。但我不确定这个事实。即使章节实体被懒洋洋地映射,为什么它只得到我以前查询的书籍集?我认为
从book book内部连接book.chapters chapters where chapter.title(如“%hibernate%”)中选择book
是我首先应该尝试的。非常感谢回复:)我在我的答案中添加了两个链接,概述了抓取策略。感谢这些链接,但即使在我使用LAZY进行抓取策略时,结果中也出现了书籍和章节对。不过我得到的是复制的图书。谢谢你的链接:)