I was rather surprised to see this exception:
| Caused by: org.hibernate.HibernateException: cannot simultaneously fetch
multiple bags
| at org.hibernate.loader.BasicLoader.postInstantiate(BasicLoader.java:66)
| at org.hibernate.loader.hql.QueryLoader.<init>(QueryLoader.java:100)
| at
org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:180)
| at
org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:110)
| at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
| at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
| at
org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
| at
org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
| at
org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
| at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1612)
| at
org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:76)
| ... 70 more
|
I have an entity called Order which has two lazy collections:
| @Entity
| @Table(name="tbl_order")
| public class Order implements Serializable
| {
| private List<Address> addresses;
| private List<OrderLine> orderItems;
| private List<TrackingNumber> trackingNumbers;
|
| public Order()
| {
| }
|
| @OneToMany(mappedBy="order", fetch=FetchType.LAZY,
cascade=CascadeType.ALL)
| public List<Address> getAddresses()
| {
| return this.addresses;
| }
|
| public void setAddresses(List<Address> addresses)
| {
| this.addresses = addresses;
| }
|
| @OneToMany(mappedBy="order", fetch=FetchType.LAZY,
cascade=CascadeType.ALL)
| public List<OrderLine> getOrderItems()
| {
| return this.orderItems;
| }
|
| public void setOrderItems(List<OrderLine> orderItems)
| {
| this.orderItems = orderItems;
| }
|
| @OneToMany(mappedBy="order", fetch=FetchType.LAZY,
cascade=CascadeType.ALL)
| public List<TrackingNumber> getTrackingNumbers()
| {
| return this.trackingNumbers;
| }
|
| public void setTrackingNumbers(List<TrackingNumber> trackingNumbers)
| {
| this.trackingNumbers = trackingNumbers;
| }
| }
|
The EJB-QL that caused the problem is:
| ..........
| String query = "select o from Order o " +
| "left join fetch o.addresses a " +
| "left join fetch o.orderItems ol " +
| "where o.id = :orderId";
|
| Query q = this.em.createQuery(query);
| q.setParameter("orderId", orderId);
| ..........
|
Why can't I "left join fetch" preload more than one of these collections at the
same time? I was originally eagerly-loading the addresses but I decided that
this was bad due to how my application uses this data...it would deteriorate
performance at a level I'm not happy with.
Is this a bug or a limitation?
Thanks!
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3949739#3949739
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3949739
_______________________________________________
JBoss-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jboss-user