HQL: illegal attempt to dereference collection

2019-01-26 11:06发布

The situation is like this:

I have an entity Book that holds a one-to-many relationship with Chapter.

Now if I try the query, "from Book book inner join book.chapters chapter where chapter.title like '%hibernate%'", it gives me the desired result.

But if I try, "from Book where book.chapters.title like '%hibernate%'", I get the error illegal attempt to dereference collection.

The thing is that I only want the collection of Book objects in return and not a collection of pair of Book and Chapter objects in return which I get with the former query.

Could someone help me understand?

标签: hibernate hql
2条回答
我想做一个坏孩纸
2楼-- · 2019-01-26 11:18

You can likely do this with a subquery.

Something like

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

(Not tested ...)

查看更多
在下西门庆
3楼-- · 2019-01-26 11:27

chapters is a collection in books and so will not hold the property title (Collection.title). You need to join the chapters in order to include them in your query like your first example. If your chapters are mapped lazily you will only get a collection of Book's without the chapters loaded in them. So I would say, use your first query.

For further reading, have a look at the query HQL joins and performance fetching pages.

查看更多
登录 后发表回答