You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by moritzgilsdorf <mo...@gmail.com> on 2008/08/26 10:35:38 UTC

LazyInitializationException

Hi,

I have a Problem with lazy loading. In my App I query a Database using
Hibernate. The workflow is the following:

Searchpage           ->  Resultspage     ->  Detailspage
------------------------------------------------------------------------
search by keyword ->  Results in Grid ->  Details of picked result

The queried Objects contain a collection that should be presented on the
Detailspage and loaded there lazily. When a hit in the result grid is
clicked, I pass the Id of the entry using the page activation context to
Detailspage (I want the Details to be bookmarkable). But when accessing the
collection on the Detailspage, the  LazyInitializationException is thrown.
For Database-access I use an injected service interface.

I believe this is not an unusual scenario so I hope anyone here can give me
a hint on how to solve this problem. 

Thanks, Moritz
-- 
View this message in context: http://n2.nabble.com/LazyInitializationException-tp783491p783491.html
Sent from the Tapestry Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: LazyInitializationException

Posted by moritzgilsdorf <mo...@gmail.com>.
Thanks a lot Davor. Its working now.



Davor Hrg wrote:
> 
> remove @Persist from:
> 
>  @Persist
>    private Gene gene;
> 
> and your onActivate method seems strange
> perhaps if you return null instead of GeneDetails.class;
> 
> the session is closed after renderring, not before
> the renderring is part of the request, but you chose
> to persist the Gene and redirect to your self
> in that case a new request happens and your problems..
> 
> Davor Hrg
> 
> 
> Davor Hrg
> 
> On Tue, Aug 26, 2008 at 11:17 AM, moritzgilsdorf
> <mo...@gmail.com>wrote:
> 
>>
>> I pass the Id of the Object to Detailspage and use onActivate() to query
>> for
>> the object I want to show in detail.
>>
>> My Details Page:
>>
>> public class GeneDetails {
>>    ...
>>    @Persist
>>    private Gene gene;
>>
>>    @Inject
>>    private GeneDAO geneDAO;
>>    ...
>>    Object onActivate(Long id){
>>        if(userExists){
>>           gene = geneDAO.getGeneById(id);
>>           return GeneDetails.class;
>>        }
>>        else
>>           return Index.class;
>>    }
>>    ...
>> }
>>
>> My Gene.class
>>
>> public class Gene {
>>    ...
>>    private Set<Reagent> reagents;
>>    ...
>> }
>>
>> The exception is thrown when i call:
>>
>> <t:if t:test="gene.reagents.isEmpty()">
>>
>> If I understand this right, the session is closed directly after the
>> query
>> was done and before the page is rendered. Do I have to query again for my
>> collection when I want to access it or is there any way to keep the
>> session
>> open until the page-rendering has finished?
>>
>> Thanks
>>
>> ...
>>
>> Davor Hrg wrote:
>> >
>> > you should post some code,
>> >
>> > but the most likely scenario is that you are persisting
>> > Entities in your page
>> >
>> > this is not good because every request has a different session,
>> > and the session that loaded the collection  was closed in a previous
>> > request,
>> >
>> > you should remember your search parameters instead holding on to the
>> > collection,
>> >
>> > If you are trying to optimize performance by caching results
>> > please don't, that is not the way hibernate supports it.
>> > you should always query again and let hibernate handle performance,
>> > to cache query results you'll need to get to know hibernate more
>> > and it's caching configuration (second-level cache, query cache ...).
>> >
>> >
>> > Davor Hrg
>> >
>> > On Tue, Aug 26, 2008 at 10:35 AM, moritzgilsdorf
>> > <mo...@gmail.com>wrote:
>> >
>> >>
>> >> Hi,
>> >>
>> >> I have a Problem with lazy loading. In my App I query a Database using
>> >> Hibernate. The workflow is the following:
>> >>
>> >> Searchpage           ->  Resultspage     ->  Detailspage
>> >>
>> ------------------------------------------------------------------------
>> >> search by keyword ->  Results in Grid ->  Details of picked result
>> >>
>> >> The queried Objects contain a collection that should be presented on
>> the
>> >> Detailspage and loaded there lazily. When a hit in the result grid is
>> >> clicked, I pass the Id of the entry using the page activation context
>> to
>> >> Detailspage (I want the Details to be bookmarkable). But when
>> accessing
>> >> the
>> >> collection on the Detailspage, the  LazyInitializationException is
>> >> thrown.
>> >> For Database-access I use an injected service interface.
>> >>
>> >> I believe this is not an unusual scenario so I hope anyone here can
>> give
>> >> me
>> >> a hint on how to solve this problem.
>> >>
>> >> Thanks, Moritz
>> >> --
>> >> View this message in context:
>> >> http://n2.nabble.com/LazyInitializationException-tp783491p783491.html
>> >> Sent from the Tapestry Users mailing list archive at Nabble.com.
>> >>
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>> >> For additional commands, e-mail: users-help@tapestry.apache.org
>> >>
>> >>
>> >
>> >
>>
>> --
>> View this message in context:
>> http://n2.nabble.com/LazyInitializationException-tp783491p783576.html
>> Sent from the Tapestry Users mailing list archive at Nabble.com.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: users-help@tapestry.apache.org
>>
>>
> 
> 

-- 
View this message in context: http://n2.nabble.com/LazyInitializationException-tp783491p783623.html
Sent from the Tapestry Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: LazyInitializationException

Posted by Davor Hrg <hr...@gmail.com>.
remove @Persist from:

 @Persist
   private Gene gene;

and your onActivate method seems strange
perhaps if you return null instead of GeneDetails.class;

the session is closed after renderring, not before
the renderring is part of the request, but you chose
to persist the Gene and redirect to your self
in that case a new request happens and your problems..

Davor Hrg


Davor Hrg

On Tue, Aug 26, 2008 at 11:17 AM, moritzgilsdorf
<mo...@gmail.com>wrote:

>
> I pass the Id of the Object to Detailspage and use onActivate() to query
> for
> the object I want to show in detail.
>
> My Details Page:
>
> public class GeneDetails {
>    ...
>    @Persist
>    private Gene gene;
>
>    @Inject
>    private GeneDAO geneDAO;
>    ...
>    Object onActivate(Long id){
>        if(userExists){
>           gene = geneDAO.getGeneById(id);
>           return GeneDetails.class;
>        }
>        else
>           return Index.class;
>    }
>    ...
> }
>
> My Gene.class
>
> public class Gene {
>    ...
>    private Set<Reagent> reagents;
>    ...
> }
>
> The exception is thrown when i call:
>
> <t:if t:test="gene.reagents.isEmpty()">
>
> If I understand this right, the session is closed directly after the query
> was done and before the page is rendered. Do I have to query again for my
> collection when I want to access it or is there any way to keep the session
> open until the page-rendering has finished?
>
> Thanks
>
> ...
>
> Davor Hrg wrote:
> >
> > you should post some code,
> >
> > but the most likely scenario is that you are persisting
> > Entities in your page
> >
> > this is not good because every request has a different session,
> > and the session that loaded the collection  was closed in a previous
> > request,
> >
> > you should remember your search parameters instead holding on to the
> > collection,
> >
> > If you are trying to optimize performance by caching results
> > please don't, that is not the way hibernate supports it.
> > you should always query again and let hibernate handle performance,
> > to cache query results you'll need to get to know hibernate more
> > and it's caching configuration (second-level cache, query cache ...).
> >
> >
> > Davor Hrg
> >
> > On Tue, Aug 26, 2008 at 10:35 AM, moritzgilsdorf
> > <mo...@gmail.com>wrote:
> >
> >>
> >> Hi,
> >>
> >> I have a Problem with lazy loading. In my App I query a Database using
> >> Hibernate. The workflow is the following:
> >>
> >> Searchpage           ->  Resultspage     ->  Detailspage
> >> ------------------------------------------------------------------------
> >> search by keyword ->  Results in Grid ->  Details of picked result
> >>
> >> The queried Objects contain a collection that should be presented on the
> >> Detailspage and loaded there lazily. When a hit in the result grid is
> >> clicked, I pass the Id of the entry using the page activation context to
> >> Detailspage (I want the Details to be bookmarkable). But when accessing
> >> the
> >> collection on the Detailspage, the  LazyInitializationException is
> >> thrown.
> >> For Database-access I use an injected service interface.
> >>
> >> I believe this is not an unusual scenario so I hope anyone here can give
> >> me
> >> a hint on how to solve this problem.
> >>
> >> Thanks, Moritz
> >> --
> >> View this message in context:
> >> http://n2.nabble.com/LazyInitializationException-tp783491p783491.html
> >> Sent from the Tapestry Users mailing list archive at Nabble.com.
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> >> For additional commands, e-mail: users-help@tapestry.apache.org
> >>
> >>
> >
> >
>
> --
> View this message in context:
> http://n2.nabble.com/LazyInitializationException-tp783491p783576.html
> Sent from the Tapestry Users mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>

Re: LazyInitializationException

Posted by moritzgilsdorf <mo...@gmail.com>.
I pass the Id of the Object to Detailspage and use onActivate() to query for
the object I want to show in detail. 

My Details Page:

public class GeneDetails {
    ...
    @Persist
    private Gene gene;

    @Inject
    private GeneDAO geneDAO;  
    ...
    Object onActivate(Long id){
	if(userExists){
           gene = geneDAO.getGeneById(id);
           return GeneDetails.class;
	}
	else
	   return Index.class;
    }
    ...
}

My Gene.class

public class Gene {
    ...
    private Set<Reagent> reagents;
    ...
}

The exception is thrown when i call:

<t:if t:test="gene.reagents.isEmpty()">

If I understand this right, the session is closed directly after the query
was done and before the page is rendered. Do I have to query again for my
collection when I want to access it or is there any way to keep the session
open until the page-rendering has finished?

Thanks

...

Davor Hrg wrote:
> 
> you should post some code,
> 
> but the most likely scenario is that you are persisting
> Entities in your page
> 
> this is not good because every request has a different session,
> and the session that loaded the collection  was closed in a previous
> request,
> 
> you should remember your search parameters instead holding on to the
> collection,
> 
> If you are trying to optimize performance by caching results
> please don't, that is not the way hibernate supports it.
> you should always query again and let hibernate handle performance,
> to cache query results you'll need to get to know hibernate more
> and it's caching configuration (second-level cache, query cache ...).
> 
> 
> Davor Hrg
> 
> On Tue, Aug 26, 2008 at 10:35 AM, moritzgilsdorf
> <mo...@gmail.com>wrote:
> 
>>
>> Hi,
>>
>> I have a Problem with lazy loading. In my App I query a Database using
>> Hibernate. The workflow is the following:
>>
>> Searchpage           ->  Resultspage     ->  Detailspage
>> ------------------------------------------------------------------------
>> search by keyword ->  Results in Grid ->  Details of picked result
>>
>> The queried Objects contain a collection that should be presented on the
>> Detailspage and loaded there lazily. When a hit in the result grid is
>> clicked, I pass the Id of the entry using the page activation context to
>> Detailspage (I want the Details to be bookmarkable). But when accessing
>> the
>> collection on the Detailspage, the  LazyInitializationException is
>> thrown.
>> For Database-access I use an injected service interface.
>>
>> I believe this is not an unusual scenario so I hope anyone here can give
>> me
>> a hint on how to solve this problem.
>>
>> Thanks, Moritz
>> --
>> View this message in context:
>> http://n2.nabble.com/LazyInitializationException-tp783491p783491.html
>> Sent from the Tapestry Users mailing list archive at Nabble.com.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: users-help@tapestry.apache.org
>>
>>
> 
> 

-- 
View this message in context: http://n2.nabble.com/LazyInitializationException-tp783491p783576.html
Sent from the Tapestry Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: LazyInitializationException

Posted by Davor Hrg <hr...@gmail.com>.
you should post some code,

but the most likely scenario is that you are persisting
Entities in your page

this is not good because every request has a different session,
and the session that loaded the collection  was closed in a previous
request,

you should remember your search parameters instead holding on to the
collection,

If you are trying to optimize performance by caching results
please don't, that is not the way hibernate supports it.
you should always query again and let hibernate handle performance,
to cache query results you'll need to get to know hibernate more
and it's caching configuration (second-level cache, query cache ...).


Davor Hrg

On Tue, Aug 26, 2008 at 10:35 AM, moritzgilsdorf
<mo...@gmail.com>wrote:

>
> Hi,
>
> I have a Problem with lazy loading. In my App I query a Database using
> Hibernate. The workflow is the following:
>
> Searchpage           ->  Resultspage     ->  Detailspage
> ------------------------------------------------------------------------
> search by keyword ->  Results in Grid ->  Details of picked result
>
> The queried Objects contain a collection that should be presented on the
> Detailspage and loaded there lazily. When a hit in the result grid is
> clicked, I pass the Id of the entry using the page activation context to
> Detailspage (I want the Details to be bookmarkable). But when accessing the
> collection on the Detailspage, the  LazyInitializationException is thrown.
> For Database-access I use an injected service interface.
>
> I believe this is not an unusual scenario so I hope anyone here can give me
> a hint on how to solve this problem.
>
> Thanks, Moritz
> --
> View this message in context:
> http://n2.nabble.com/LazyInitializationException-tp783491p783491.html
> Sent from the Tapestry Users mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>