HQL:非法尝试取消引用收集

时间:2011-06-19 20:23:14

标签: hibernate hql

情况是这样的:

我有一个与Chapter保持一对多关系的实体书。

现在,如果我尝试查询“from Book book inner join book.chapters chapter where chapter.title like '%hibernate%'”,它会为我提供所需的结果。

但如果我尝试“from Book where book.chapters.title like '%hibernate%'”,我会收到错误非法尝试取消引用收集

问题在于我只想要Book对象的集合,而不是我对前一个查询得到的Book和Chapter对象的集合。

有人可以帮我理解吗?

2 个答案:

答案 0 :(得分:12)

章节是书籍中的集合,因此不会保留属性标题(Collection.title)。您需要加入章节,以便将它们包含在您的查询中,就像您的第一个示例一样。如果您的章节被懒惰地映射,您将只获得Book的集合,而不会加载章节。所以我想说,使用你的第一个查询。

如需进一步阅读,请查看query HQL joinsperformance fetching页。

答案 1 :(得分:2)

您可以使用子查询执行此操作。

这样的东西
from Book book where not exists (from chapter where 
                   chapter.title like '%hibernate%' and chapter.book = book)

(未经测试......)