Tutorial :Hibernate Criteria: Eagerly load ManyToMany collection


My problem seems pretty straightforward to me, but I just can't seem to find an answer that works. I have a Hibernate Entity which has a ManyToMany association with another Entity, which is fetched lazily by default. I want to create a Criteria which will return the Entity with the ManyToMany association loaded eagerly.

Here is the Entity in question (with irrelevant parts removed):

@Entity  public class Order {      @ManyToMany    private List<Item> items;      @ManyToMany    private List<Discount> discountEntries;      ...    }  

Here are my notable attempts thus far and the results:

Criteria criteria = getSession().createCriteria(Order.class)                                  .setFetchMode("items", FetchMode.SELECT)                                  .setFetchMode("discountEntries", FetchMode.SELECT);  criteria.list();  

- Loads the items lazily

Criteria criteria = getSession().createCriteria(Order.class)                                  .setFetchMode("items", FetchMode.JOIN)                                  .setFetchMode("discountEntries", FetchMode.JOIN);  criteria.list();  

- Cannot fetch multiple bags

Criteria criteria = getSession().createCriteria(Order.class)                                  .createAlias("items", "items", CriteriaSpecification.INNER_JOIN)                                  .setFetchMode("items", FetchMode.JOIN)                                  .createAlias("discountEntries", "discountEntries", CriteriaSpecification.INNER_JOIN)                                  .setFetchMode("discountEntries", FetchMode.JOIN);  criteria.list();  

- Returns an empty list

EDIT: Added another ManyToMany association as that seems to be part of the problem.


Get the collection with the LAZY setting and :

List list = criteria.list();  Hibernate.initialize(list);  

This will initialize it immediately, only for this case.


Did you try: @ManyToMany(fetch = FetchType.EAGER)? what was the result?

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Next Post »