org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role
jmacneedshelp Aug 11, 2009 5:20 AMI have a bean that pulls orders and presents them in an dataTable. In the dataTable I use a command link to set the selected order back into the bean so that I can create a popup window to show the order for printing. From within the popup window I access the getter to pull the Order but when I try to access any of the Collections in the Orders entity, I get a LIE. What's weird is that I can access these collections on the setter, but they're f'ed up in the getter.
I'm getting and LIE and I don't know why this shit aint easy pie! Please help before I cry....OK, enough of that crap, down to business.
VendorOrder bean
@Stateful @Name("VendorOrder") @Scope(ScopeType.SESSION) public class VendorOrderAction implements VendorOrder { @In private EntityManager entityManager; private Orders vendorOrder = new Orders(); public Orders getVendorOrder() { return vendorOrder; } public void setVendorOrder(Orders vendorOrder) { this.vendorOrder = vendorOrder; } public List<Orders> getOrderList() { return entityManager.createQuery( "select o from Orders o join fetch o.orderitems as item where item.vendor.vendorid=:vendor and o.status In('Vendors Assigned')" ).setParameter("vendor", vendor.getVendorid()).getResultList(); }
OrderManager(opens OrderView window using commandLink)
<a:commandLink id="showItem" action="#{VendorOrder.setVendorOrder(_orders)}" oncomplete="window.open('OrderView.seam','sss:', 'width=1000,height=750, left=20, top=20');" > Click Here! </a:commandLink>
OrderView popup attemtpting to access one of the collections in the Orders entity pulled from the VendorOrder bean.
<h:outputText value="#{VendorOrder.vendorOrder.orderdeliveries.get(0).firstName}" /> <h:outputText value="#{VendorOrder.vendorOrder.orderdeliveries.get(0).lastName}" /><br/> <h:outputText value="#{VendorOrder.vendorOrder.orderdeliveries.get(0).organization}" /><br/> <h:outputText value="#{VendorOrder.vendorOrder.orderdeliveries.get(0).address1}" /><br/> <h:outputText value="#{VendorOrder.vendorOrder.orderdeliveries.get(0).address2}" /><br/> <h:outputText value="#{VendorOrder.vendorOrder.orderdeliveries.get(0).city}" />, <h:outputText value="#{VendorOrder.vendorOrder.orderdeliveries.get(0).state}" /><h:outputText value="#{VendorOrder.vendorOrder.orderdeliveries.get(0).postalCode}" /> <br/> <h:outputText value="#{VendorOrder.vendorOrder.orderdeliveries.get(0).country}" />
Order entity orderdeliveries get method
@OneToMany(fetch = FetchType.LAZY, mappedBy = "orders") public List<Orderdelivery> getOrderdeliveries() { return this.orderdeliveries; }
Stacktrace
javax.faces.FacesException: javax.el.ELException: /vendor/OrderView.xhtml @44,93 value="#{VendorOrder.vendorOrder.orderdeliveries.get(0).firstName}": org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.xeosuite.xeoadmin.entity.Orders.orderdeliveries, no session or session was closed at javax.faces.component.UIOutput.getValue(UIOutput.java:187) at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:201) at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:284) at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:154) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:861) at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:286) at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:262) at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:199) at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:194) at org.ajax4jsf.renderkit.RendererBase.encodeChildren(RendererBase.java:121) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:936) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:942) at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592) at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108) at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:216) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:109)
... And further up the stack
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.xeosuite.xeoadmin.entity.Orders.orderdeliveries, no session or session was closed at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358) at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350) at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:343) at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86) at org.hibernate.collection.PersistentBag.get(PersistentBag.java:422) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:329) at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:274) at org.jboss.el.parser.AstMethodSuffix.getValue(AstMethodSuffix.java:59) at org.jboss.el.parser.AstValue.getValue(AstValue.java:67) at org.jboss.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71) at javax.faces.component.UIOutput.getValue(UIOutput.java:184) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
Thank you for your help.