Hy Forum,
ich habe da eine kleine Verständnissfrage bzgl. Lazy Loading.
Ich habe 3 Entitäten, Adresse, Unterlagen, UnterlagenGesendet. Adresse ist eine Adresse mit:
--- cut ---
<hibernate-mapping>
<class name="de.einsle.segeln.data.model.Adresse" table="adresse">
<id name="adressId" type="long">
<column name="adress_id" />
<generator class="identity" />
</id>
<property name="kdNr" type="string">
<column name="kd_nr" length="10" />
</property>
[...]
<set name="unterlagenGesendets" inverse="true" lazy="true" cascade="delete">
<key>
<column name="adress_id" not-null="true" />
</key>
<one-to-many class="de.einsle.segeln.data.model.UnterlagenGesendet" />
</set>
</class>
</hibernate-mapping>
--- cut ---
Dazu Unterlagen
--- cut ---
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 07.02.2009 17:51:23 by Hibernate Tools 3.2.2.GA -->
<hibernate-mapping>
<class name="de.einsle.segeln.data.model.Unterlagen" table="unterlagen">
<id name="unterlagenId" type="long">
<column name="unterlagen_id" />
<generator class="identity" />
</id>
<property name="unterlagen" type="string">
<column name="unterlagen" length="64" />
</property>
[...]
<set name="unterlagenGesendets" inverse="true" lazy="true" cascade="delete">
<key>
<column name="unterlagen_id" not-null="true" />
</key>
<one-to-many class="de.einsle.segeln.data.model.UnterlagenGesendet" />
</set>
</class>
</hibernate-mapping>
--- cut ---
Dazu UnterlagenGesendet
--- cut ---
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 07.02.2009 17:51:23 by Hibernate Tools 3.2.2.GA -->
<hibernate-mapping>
<class name="de.einsle.segeln.data.model.UnterlagenGesendet" table="unterlagen_gesendet">
<composite-id name="id" class="de.einsle.segeln.data.model.UnterlagenGesendetId">
<key-property name="adressId" type="long">
<column name="adress_id" />
</key-property>
<key-property name="unterlagenId" type="long">
<column name="unterlagen_id" />
</key-property>
</composite-id>
<property name="gesendet" type="date">
<column name="gesendet" length="13" />
</property>
[...]
<many-to-one name="unterlagen" class="de.einsle.segeln.data.model.Unterlagen" update="false" insert="false" fetch="select" >
<column name="unterlagen_id" not-null="true" />
</many-to-one>
<many-to-one name="adresse" class="de.einsle.segeln.data.model.Adresse" update="false" insert="false" fetch="select">
<column name="adress_id" not-null="true" />
</many-to-one>
</class>
</hibernate-mapping>
--- cut ---
Die Pojos dazu sind analog, ich denke nicht das ich die Posten brauch.
Jetzt habe ich das Problem z.B. beim Laden der Adresse, das der automatisch einen Select auf die UnterlagenGesendet mitmacht.
--- cut ---
Hibernate: select adresse0_.adress_id as adress1_0_, adresse0_.parent_adress_id as parent2_0_, adresse0_.kd_nr as kd3_0_, adresse0_.status as status0_, adresse0_.markierung as markierung0_, adresse0_.deaktiv_datum as deaktiv6_0_, adresse0_.loesch_datum as loesch7_0_, adresse0_.eingabe_datum as eingabe8_0_, adresse0_.anfrage_datum as anfrage9_0_, adresse0_.titel as titel0_, adresse0_.name as name0_, adresse0_.vorname as vorname0_, adresse0_.strasse as strasse0_, adresse0_.plz as plz0_, adresse0_.ort as ort0_, adresse0_.land as land0_, adresse0_.geburts_datum as geburts17_0_, adresse0_.geburts_ort as geburts18_0_, adresse0_.tel_priv as tel19_0_, adresse0_.tel_ges as tel20_0_, adresse0_.fax as fax0_, adresse0_.mobil as mobil0_, adresse0_.email as email0_, adresse0_.internet as internet0_, adresse0_.beruf as beruf0_, adresse0_.bemerkung as bemerkung0_, adresse0_.bemerkung_intern as bemerkung27_0_ from adresse adresse0_ order by adresse0_.kd_nr desc
Hibernate: select unterlagen0_.adress_id as adress1_1_, unterlagen0_.unterlagen_id as unterlagen2_1_, unterlagen0_.adress_id as adress1_5_0_, unterlagen0_.unterlagen_id as unterlagen2_5_0_, unterlagen0_.gesendet as gesendet5_0_ from unterlagen_gesendet unterlagen0_ where unterlagen0_.adress_id=?
Hibernate: select unterlagen0_.adress_id as adress1_1_, unterlagen0_.unterlagen_id as unterlagen2_1_, unterlagen0_.adress_id as adress1_5_0_, unterlagen0_.unterlagen_id as unterlagen2_5_0_, unterlagen0_.gesendet as gesendet5_0_ from unterlagen_gesendet unterlagen0_ where unterlagen0_.adress_id=?
Hibernate: select unterlagen0_.adress_id as adress1_1_, unterlagen0_.unterlagen_id as unterlagen2_1_, unterlagen0_.adress_id as adress1_5_0_, unterlagen0_.unterlagen_id as unterlagen2_5_0_, unterlagen0_.gesendet as gesendet5_0_ from unterlagen_gesendet unterlagen0_ where unterlagen0_.adress_id=?
--- cut ---
Versteh ich jetzt irgendwie nicht, weil im Mapping ja steht: lazy="true"
Was ich gerne hätte, das wenn ich die Adresse lade, das nur die Adresse kommt, er also die weiteren Selects nach Unterlagen nicht macht. Brauch ich die Unterlagen, greife ich explizit drauf zu.
Hat hier evtl. jemand eine Idee, was ich hier falsch mache? Ich hab im Moment leider keine Idee mehr.
Hibernate ist 3.3.1, ohne Annotationen, Db ist MySQL 5.1.
Vielen Dank an euch.
Robert
|