You need Open Session In View --> http://www.hibernate.org/43.html

On 4/11/06, Igor Vaynberg < [EMAIL PROTECTED]> wrote:
in that case your container's persistence mechanism is closing the underlying hibernate session after the end of the invocation? this is a container specific problem not a wicket one. you need to figure out how to tell your container to keep the underlying entity manager session open so that lazy collections can be fetched even outside the session/stateless bean's method invocation.


-Igor


On 4/11/06, Vincent Jenks < [EMAIL PROTECTED]> wrote:
I changed the param to look like yours:

new PropertyModel(blogModel, "categories")

...and I get the same exception...no luck!

On 4/11/06, Igor Vaynberg < [EMAIL PROTECTED]> wrote:
> you are still not using a model for the listview, you are binding the
> listview to hibernate's lazy initializable set instead in this line:
>
>
> add(new ListView("categoriesView", ((Blog)getModelObject())
>  .getCategories())
>
> try changing that to:
>
> add(new ListView("categoriesView", new PropertyModel(blogModel,
> "categories"));
>
> or create a simple wrapper around blogmodel directly if you dont want to use
> "soft binding" and reflection.
>
> -Igor
>
>
>
>
> On 4/11/06, Vincent Jenks < [EMAIL PROTECTED]> wrote:
> >
>  OK, this doesn't appear to work.  I finally got around to testing this
> and I still get a
> LazyInitializationException.
>
> I passed the model around and it's barfing.
>
> "main" page (ViewBlog.class):
>
>                 //get object graph in detachable model
>                 IModel blogModel = new LoadableDetachableModel()
>                 {
>                         protected Object load()
>                         {
>                                 //get blog & entries
>                                 Blog blog =
> BlogProxy.getDefault ();
>                                 return blog;
>                         }
>                 };
>
>                 //set as page model
>                 setModel(blogModel);
>
>                 //add panel components
>                 add(new TopicsPanel("topicsPanel", blogModel));
>
> In the TopicsPanel class:
>
> public class TopicsPanel extends Panel
> {
>         public TopicsPanel(String id, IModel blogModel)
>         {
>                 super(id, blogModel);
>
>                 //get model object
>                 Blog blog = (Blog)getModelObject();
>
>                 //add list view repeater
>                 add(new ListView("categoriesView",
> ((Blog)getModelObject()).getCategories())
>                 {
>                         protected void
> populateItem(ListItem item)
>                         {
>                                 //get row model
>                                 final Category category =
> (Category)item.getModelObject();
>
>                                 //create link
>                                 Link categoryLink = new
> PageLink("categoryLink", ViewBlog.class)
>                                 {
>                                         public void
> onClick()
>                                         {
>
> info("booyah!");
>                                         }
>                                 };
>
>                                 //add category name label
>                                 categoryLink.add(new
> Label("topic", category.getName ()));
>
>                                 //add link
>                                 item.add(categoryLink);
>                         }
>                 });
>         }
> }
>
> Where I'm trying to retrive the lazy collection in the ListView the
> session has still been lost.
>
> What have I done wrong?  How can I get the lazily loaded collection
> and not have to resort to eager fetching?
>
> Remember, I'm not using Hibernate directly...I'm using JBoss EJB3 in
> JBoss 4.0.4RC1...I don't have a lot of control over Hibernate...no do
> I want to if I want to keep my project container-independent.
>
> Thanks!
>
> On 3/20/06, Igor Vaynberg <[EMAIL PROTECTED]> wrote:
> >
> > or pass the same model :)
> >
> >
> > -Igor
> >
> >
>  >
> > On 3/20/06, Vincent Jenks <[EMAIL PROTECTED] > wrote:
> > >
> > > Well, in the previous page which passes the Product into this page...the
> object was wrapped in a detachable model...not just called directly...so I
> should try and wrap it again in the current page?
> > >
> > >
> > >
> > >  On 3/20/06, Igor Vaynberg < [EMAIL PROTECTED]> wrote:
> > > >
> > > > instead of using the product object directly, use a detachable model.
> > > >
> > > > you might also need to use an open session in view interceptor in case
> jboss closes the hibernate session after your bean's method is finished
> executing. if it does this, then by the time wicket code runs the object is
> already disconnected from its session and thus cant load any child
> collections.
> > > >
> > > >
> > > > -Igor
> > > >
> > > >
> > > >
> > > >
> > > > On 3/20/06,  Vincent Jenks < [EMAIL PROTECTED] > wrote:
> > > > >
> > > > > OK, so I'm in a bit of a quagmire.
> > > > >
> > > > > I'm using Wicket + EJB3 (JBoss 4.0.4RC1) which uses Hibernate as the
> persistence behind EJB3.
> > > > >
> > > > > Unless I set all of my parent/child object relationship annotations
> to EAGER fetching...I get this error:
> > > > >
> > > > > "org.hibernate.LazyInitializationException : failed
> to lazily initialize a collection of role:...."
> > > > >
> > > > > ...when I try to access the child collection of the parent object.
> In my case, for example, I am passing an object to a form in Wicket using
> the constructor:
> > > > >
> > > > > public class ProductDetail extends WebPage
> > > > > {
> > > > >     public ProductDetail()
> > > > >     {
> > > > >         this(null);
> > > > >     }
> > > > >
> > > > >     public ProductDetail(Product product)
> > > > >     {
> > > > >         add(new
> ProductDetailForm("productDetailForm", product));
> > > > > ...
> > > > >
> > > > > The parent object being "Product" and the child being
> Product.getConfigurations()....which is a List<Configuration>.
> > > > >
> > > > > This same ProductDetail page has a form (see above where I passed
> the Product into the form)...and I need to access the child collection
> inside the form:
> > > > >
> > > > >             add(new ListView("configs", product.getConfigurations())
> > > > >             {
> > > > >                 protected void populateItem(ListItem item)
> > > > >                 {
> > > > >                     final Configuration config =
> (Configuration)item.getModelObject();
> > > > >
> > > > >                     item.add(new Label("quantity",
> String.valueOf(config.getQuantity())));
> > > > >                     item.add(new Label("name", config.getName()));
> > > > >                       item.add(new Label("weight",
> config.getWeight()));
> > > > >                     item.add(new Label("price", String.valueOf(
> config.getPrice())));
> > > > >                 }
> > > > >             });
> > > > >
> > > > > badda-bing...here's when the exception occurs.  Now...I *could* fix
> it by setting the collection to EAGER fetching...but this could eventually
> cause me some severe performance problems....especially once the collections
> begin to grow in size...I just have to be able to do LAZY fetching.
> > > > >
> > > > > Since I'm using EJB3 CMP I don't have control over the hibernate
> session - the container does...so my flexibility there is limited.  Is there
> something I could do to work around this?
> > > > >
> > > > > Thanks!
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>
> -------------------------------------------------------
> This SF.Net email is sponsored by xPML, a groundbreaking scripting language
> that extends applications into web and mobile media. Attend the live webcast
> and join the prime developer group breaking into this new coding territory!
> http://sel.as-us.falkag.net/sel?cmdlnk&kid0944&bid$1720&dat1642
> _______________________________________________
> Wicket-user mailing list
> Wicket-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wicket-user
>
>


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmdlnk&kid0944&bid$1720&dat1642
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user


Reply via email to