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进行抓取策略时,结果中也出现了书籍和章节对。不过我得到的是复制的图书。谢谢你的链接:)