-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 6 posts ] 
Author Message
 Post subject: Lazy Loading funktioniert nicht
PostPosted: Wed Mar 31, 2010 7:07 am 
Beginner
Beginner

Joined: Sat Mar 27, 2010 11:03 am
Posts: 27
Location: Berlin
Hallo,

immer wenn ich ein Objekt lade, welches ein Set enthält und dieses Set nicht
leer ist, werden alle damit in Verbindung stehenden Objekte mitgeladen.
Auch wenn ich gar nicht auf das Set zugreife.

Ich habe aber explizit in der Annotaion Fetchtype.Lazy angegeben.
Dies wird anscheindend ignoriert. Leider führt das natürlich zu Performanceproblemen.

Die Annotaion des Getter sieht so aus:

Code:
   
@OneToMany(fetch = FetchType.LAZY, mappedBy = "provider", targetEntity = Devices.class)
public Set<Devices> getDevicesES() {
      return this.devicesES;
   }


Ich habe schon alle möglichen Versuche unternommen, leider ohne Erfolg.
Auch die Suche hier und in anderen Foren bzw. der Doku brachte mich leider nicht weiter.

Könnte mir bitte jemand einen Hinweis geben woran das liegt ?

Danke !

Moe


Top
 Profile  
 
 Post subject: Re: Lazy Loading funktioniert nicht
PostPosted: Wed Mar 31, 2010 9:11 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Wenn Du alle foren schon erfolglos durchsuchst hast, dann wuerde ich an Deiner Stelle:
1. mir den source-code von Hibernate runterladen
2. einen Breakpoint auf die methode org.hibernate.loader.Loader#loadCollection setzen
3. debuggen und wenn der code den breakpoint erreicht:
im stacktrace kontrollieren was zum loaden der Collection gefuehrt hat.

Sehr oft ist das Debuggen und das Lesen des Hibernate Quellcode viel aufschlussreicher als forums zu konsultieren.
(auf jeden Fall zielfuehrender)


Top
 Profile  
 
 Post subject: Re: Lazy Loading funktioniert nicht
PostPosted: Wed Mar 31, 2010 9:34 am 
Beginner
Beginner

Joined: Sat Mar 27, 2010 11:03 am
Posts: 27
Location: Berlin
Danke für die Hinweise aber ich dachte es müsste sich um ein
generelles Problem handeln bzw. um einen Fehler meineserseits.

Weil das Eager- statt Lazy-Loading passiert ja schon nur
durch das Laden der Objekts. Selbst wenn ich absolut nichts damit
tue. Also schon beim diesem Code:

Code:
      
Query qProvider = em.createQuery("from dbobjects.Provider order by providername asc");      
List myList = qProvider.getResultList();


Ich bin mir unsicher ob es mir gelingt das Problem beim debuggen des Source von Hibernate zu finden.
Daher wäre ich über jeden weiteren Hinweis dankbar.

Moe


Top
 Profile  
 
 Post subject: Re: Lazy Loading funktioniert nicht
PostPosted: Thu Apr 01, 2010 9:32 am 
Beginner
Beginner

Joined: Sat Mar 27, 2010 11:03 am
Posts: 27
Location: Berlin
pb00067 wrote:
1. mir den source-code von Hibernate runterladen
2. einen Breakpoint auf die methode org.hibernate.loader.Loader#loadCollection setzen
3. debuggen und wenn der code den breakpoint erreicht:
im stacktrace kontrollieren was zum loaden der Collection gefuehrt hat.


Vielen Dank für den Hinweis.
Ich habe damit die Ursache herrausgefunden. Es liegt am PropertyChangeSupport dieses Objekts.
Code:
   public void setDevicesES(Set<Devices> devicesES) {
      propertyChangeSupport.firePropertyChange("devicesES", this.devicesES,
            this.devicesES = devicesES);

   }


Wenn ich den Zusammenhang richtig verstehe feuert dieser PropertychangeSupport ein
PropertyChangeEvent welches Hibernate dazu veranlasst die Collection zu laden.

Leider hilft mir diese Erkenntnis aber nur begrenzt weiter da ich den PropertychangeSupport
für Databinding benötige.

Wie könnte ich das umgehen ?


Top
 Profile  
 
 Post subject: Re: Lazy Loading funktioniert nicht
PostPosted: Thu Apr 01, 2010 10:45 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Hast Du
@org.hibernate.annotations.LazyCollection (LazyCollectionOption.EXTRA)
schon ausprobiert ?


Top
 Profile  
 
 Post subject: Re: Lazy Loading funktioniert nicht
PostPosted: Thu Apr 01, 2010 11:46 am 
Beginner
Beginner

Joined: Sat Mar 27, 2010 11:03 am
Posts: 27
Location: Berlin
pb00067 wrote:
Hast Du
@org.hibernate.annotations.LazyCollection (LazyCollectionOption.EXTRA)
schon ausprobiert ?


Nein, die kannte ich noch nicht.
Habe es mal ausprobiert...
Ist zwar besser aber es scheint bei dieser Option zumindest mit einem "select count(id) ..."
die Anzahl der Objekte der Collections abzufragen und bei vielen Objekten dauert das auch recht lange.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 6 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.