Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HQL: illegal attempt to dereference collection

Tags:

hibernate

hql

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?

like image 599
skip Avatar asked Jun 19 '11 20:06

skip


1 Answers

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.

like image 178
joostschouten Avatar answered Sep 20 '22 23:09

joostschouten