Hallo,
Ich habe 2 Klassen A und B die per one-to-one Assoziation verbunden sind. Die Assoziation iat auf einen foreign Key gemappt, der in der Tabelle von B liegt. Wenn ich jetzt per HQL alle Instanzen von A lade, sehe ich im Log, dass für jedes A ein zusätzliches Statement ausgeführt wird, um das dazugehörende B zu laden. Bei vielen As kann das natürlich zur Katastrophe werden ("N+1"-Problem).
Da ich die a->b referenz nur selten brauche, versuche ich also, das Mapping so zu konfigurieren, dass die Referenz nur bei Verwendung aufgelöst wird. Nur leider gelingt das nicht! Stattdessen habe ich eine Aussage gefunden, dass das proxying (erforderlich für Lazyloading von zu-1-Beziehungen) nur geht, wenn constrained="true" gesetzt ist - was wiederum heißt, dass der FK auf der gegebenen Seite stehen muss, was bei mir nicht der Fall ist.
Allerdings hat auch ein versuchsweises Setzen von constrained="true" keinen Erfolg gebracht.
Hier meine Konfiguration
Hibernate version: 3.1.2
mapping A:
one-to-one name="b" lazy="proxy" property-ref="a"
mapping B:
many-to-one name="a" column="a_id" update="false" unique="true" not-null="true"
Query:
from A a
Klasse B hat das lazy=true" attribut.
Würde mich freuen, wenn mir jemand zeigen könnte, dass Lazy-Loading one-to-one-Beziehungen doch geht
Christian
|