-->
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.  [ 5 posts ] 
Author Message
 Post subject: Verständnisfrage: fetch="join"
PostPosted: Mon Oct 29, 2007 5:09 am 
Newbie

Joined: Mon Oct 29, 2007 4:29 am
Posts: 3
Hallo zusammen,

fetch="join" macht nicht genau das, was ich mir so vorstelle, was vermutliche jedoch an meiner Vorstellung liegt. Hier eine kurze Beschreibung zum Problem:

Ich habe drei Tabellen: A, B und C die durch 1:n Beziehungen miteinander verknüpft sind. Also B ist eine Detail-Tabelle von A und C ist eine Detail-Tabelle von B.
Lazy Loading ist immer auf "false" gesetzt.
Geladen wird der Baum mit: session.get(A.class, new Integer(1));
Wenn ich jetzt bei allen Relationen fetch="select" definiere bekomme ich wie erwartet 3 Queries.
Wenn ich jetzt die Beziehung zwischen Tabelle A und B als fetch="join" definiere, bekomme ich wie erwartet 2 Queries und wenn ich zusätzlich noch die Beziehung zwischen B und C mit fetch="join" definiere bekomme ich 1 Query.

Jetzt hätte ich erwartet, dass wenn ich die Beziehung zwischen Tabelle A und Tabelle B als fetch="select" definiere und die Beziehung zwischen Tabelle B und C als fetch="join" definiere, ich ebenfalls nur 2 Queries erhalte. Nämlich eine für Tabelle A und eine für Tabelle B gejoined mit Tabelle C. Dem ist aber nicht so. In diesem Beispiel erhalte ich für jede Tabelle 1 Query, also insgesamt 3.

Wieso erkennt Hibernate (Version 3.2.2) nicht, dass ich die Tabellen B und C joinen möchte?

Ich hoffe ich habe mich verständlich ausgedrückt.

Danke und Gruss


Top
 Profile  
 
 Post subject:
PostPosted: Sat Nov 03, 2007 4:22 pm 
Expert
Expert

Joined: Tue Nov 23, 2004 7:00 pm
Posts: 570
Location: mostly Frankfurt Germany
join verursacht eager loading. Das würde ich mir überlegen.

Evt. ist es besser das durch die Abfrage zu steuern, was Du wie nachlädst.

_________________
Best Regards
Sebastian
---
Training for Hibernate and Java Persistence
Tutorials for Hibernate, Spring, EJB, JSF...
eBook: Hibernate 3 - DeveloperGuide
Paper book: Hibernate 3 - Das Praxisbuch
http://www.laliluna.de


Top
 Profile  
 
 Post subject:
PostPosted: Sun Nov 11, 2007 2:03 pm 
Newbie

Joined: Mon Oct 29, 2007 4:29 am
Posts: 3
Hallo, vielen Dank für die Antwort. Aber die Applikation ist so gebaut, und das lässt sich für den nächsten Release auch nicht ändern, dass immer ein kompletter Objekt-Baum geladen wird. Die ist Lazy-Loading nicht sinnvoll, bzw. eventuell sogar kontraproduktiv.
Alles was ich möchte ist eigentlich eine beliebige Relation im Datenmodell über einen Outer-Join zu laden. Das scheint aber leider nicht zu funktionieren.
Es scheint nur zu gehen, wenn ich ausgehend vom "obersten" Objekt im Baum. (Das ist das welches über load() lade) alle Relationen mit Outer-Joins lade.

Grüsse


Top
 Profile  
 
 Post subject:
PostPosted: Tue Nov 13, 2007 3:59 pm 
Expert
Expert

Joined: Tue Nov 23, 2004 7:00 pm
Posts: 570
Location: mostly Frankfurt Germany
Das lässt sich durch die Abfrage steuern. Hilfreich könnte auch der Cache sein, da DB Zugriffe damit wegfallen könnten.

_________________
Best Regards
Sebastian
---
Training for Hibernate and Java Persistence
Tutorials for Hibernate, Spring, EJB, JSF...
eBook: Hibernate 3 - DeveloperGuide
Paper book: Hibernate 3 - Das Praxisbuch
http://www.laliluna.de


Top
 Profile  
 
 Post subject:
PostPosted: Fri Nov 16, 2007 1:45 pm 
Newbie

Joined: Mon Oct 29, 2007 4:29 am
Posts: 3
default_batch_fetch_size habe ich auf 16 gesetzt, das hat schon viel geholfen, aber das mit der Abfrage verstehe ich nicht. Welche Abfrage? Ich rufe Session.get("entityName", Long(123)) auf. Eine Abfrage im Sinne eines SQL/HQL Statements habe ich nicht.

Grüsse


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