-->
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.  [ 3 posts ] 
Author Message
 Post subject: Performance Verbesserung durch eager fetch - wie?
PostPosted: Wed Dec 07, 2005 10:17 am 
Newbie

Joined: Wed Dec 07, 2005 6:24 am
Posts: 4
Ich habe mich durch das Tutorial von Hibernate 3.1rc3 gearbeitet. Unter Punkt 1.3.4 Collection of values wird erwaehnt, dass die Performance durch verwenden von eager fetch (anstatt lazy loading) verbessert werden kann. Wie muss ich die nachfolgende Funktion (aus dem Tutorial) umschreiben, um dies in die Tat umzusetzen? Ich hab verschiedene Ansaetze versucht, bin bis anhin jedoch gescheitert.

Es geht um folgende Methode:

Code:
private void addEmailToPerson(Long personId, String emailAddress) {

        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();

        Person aPerson = (Person) session.load(Person.class, personId);

        // The getEmailAddresses() might trigger a lazy load of the collection
        aPerson.getEmailAddresses().add(emailAddress);

        session.getTransaction().commit();
}


Vielen Dank,
Dennis


Top
 Profile  
 
 Post subject:
PostPosted: Wed Dec 07, 2005 4:17 pm 
Newbie

Joined: Tue Oct 11, 2005 4:38 pm
Posts: 7
Wenn Du allgemein die mapping Datei änderst, indem Du fetch="join" zu der Collection hinzufügts (eventuell noch darauf achten, dass hibernate.max_fetch_depth nicht 0 ist), sollte es ohne Codeänderung gehen. Oder willst Du nur ausnahmsweise eager fetchen?


Top
 Profile  
 
 Post subject:
PostPosted: Thu Dec 08, 2005 3:00 am 
Newbie

Joined: Wed Dec 07, 2005 6:24 am
Posts: 4
Vielen Dank für den Tip. In diesem Falle wollte ich jedoch speziell dieses Beispiel als eager fetch version umschreiben. Ich habe etwas in folgender Art versucht, allerdings ist aPerson dann immer null, obwohl in der DB mit entsprechender ID vorhanden...

Code:
private void addEmailToPerson(Long personId, String emailAddress) {

        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Person aPerson = (Person) session.createQuery("from Person p left join fetch p.emailAddresses where p.id = :pid").setParameter("pid", personId).uniqueResult(); // Eager fetch the collection so we can use it detached
        session.getTransaction().commit();
       
       aPerson.getEmailAddresses().add(emailAddress); // aPerson (and its collection) is detached
       
       Session session2 = HibernateUtil.getSessionFactory().getCurrentSession();
       session2.beginTransaction();
       session2.update(aPerson); // Reattachment of aPerson
       session2.getTransaction().commit();
    }


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 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.