Win a copy of The Java Performance Companion this week in the Performance forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Hibernate: unexpected queries in parent/child relationship

 
Vinnie Jenks
Ranch Hand
Posts: 207
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Could someone point out what I'm doing wrong? I have a parent/child relationship between two objects, Customer and Order - a customer can have many orders. The tables are setup the same way and the two join on a pk/fk field called 'cust_id'.

So...it looks like this:

Customer-<Order

Customer.Orders = List<Order> (mapped as a bag, like so):



I'm trying to get a list of customers between an Order sent-date range. The customers I get back are ones that have orders within the date range but when I try to view the list of orders...they're not filtered...I'm getting every order ever entered by that customer...I would have expected the orders to be filtered as well...but they're not...and that's obviously because of the queries being generated.

My HQL looks like this:



...which generates a query that looks like this:



However...when I list the orders for each customer...like so:



It generates a query that looks like this:



...bingo...the Order.SentDate isn't filtered for the orders.

I know I'm missing something simple...but I've been staring at it for so long it's eluding me...can someone point out a simple work-around?
 
Scott Johnson
Ranch Hand
Posts: 518
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
This is by design.

The order date criteria is just used to filter the Customer objects themselves.

Once you have a Customer, calling getOrders() will retrieve all orders for that Customer. The collections inside the Customer objects are not filtered based on your original query criteria.

Try using a collection Filter. Also see Hibernate in Action section 7.5.2.
 
Vinnie Jenks
Ranch Hand
Posts: 207
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Yep, that's exactly what I ended up doing after flipping through the "report queries" chapter in Hibernate In Action.

Sure would be nice if you could do this at the top-level w/o having to again filter the data a second time!

Thanks!
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic