Hallo,
ich habe da mal eine Frage. Ich habe 2 Tabellen, einmal Aufttrag und AuftragPos. Die beiden Tabellen sind über Fremschlüssel mit eineander verbunden. Jeder Auftrag hat mehrere Positionen. Jetzt möchte ich alle Aufträge mit den dazugehörigen Positionen laden. Dafür benötige ich einfach nur ein join. Er soll die Tabelle AuftragPos sofort mit einem Join füllen, und nicht erst nachladen.
Erschwerend kommt hinzu, dass die beiden Tabellen nicht über einen Foreign Key sondern über 2 Foreign Keys miteinander verbunden sind.
Hier meine Mappings:
Hibernate version:3.05
Das ist mein Mapping für die Auftragstabelle:
Code:
<composite-id name="id" class="AuftragId">
<key-property name="auftragsNr" type="java.lang.String">
<column name="AuftragsNr" length="20" />
</key-property>
<key-property name="auftragsKennung" type="java.lang.Integer">
<column name="AuftragsKennung" />
</key-property>
</composite-id>
<property name="sheetNr" type="java.lang.Integer">
<column name="SheetNr" not-null="true" />
</property>
<property name="kundenNr" type="java.lang.String">
<column name="KundenNr" length="20" not-null="true" />
</property>
<property name="konditionenRabattProz" type="java.lang.Float">
<column name="Konditionen_Rabatt_Proz" precision="12" scale="0" not-null="true" />
</property>
<property name="tsLieferTermin" type="java.util.Date">
<column name="tsLieferTermin" length="19" />
</property>
<set name="Auftragposes" inverse="true" fetch="join" >
<key>
<column name="AuftragsNr" length="20" not-null="true" />
<column name="AuftragsKennung" not-null="true" />
</key>
<one-to-many class="Auftragpos" />
</set>
Das mein Mapping für die AuftragPos Tabelle:
Code:
<composite-id name="id" class="">
<key-property name="lnr" type="java.lang.Integer">
<column name="LNr" />
</key-property>
<key-many-to-one name="Auftrag" class="">
<column name="AuftragsNr" length="20" />
<column name="AuftragsKennung" />
</key-many-to-one>
</composite-id>
<property name="artikelMenge" type="java.lang.Float">
<column name="Artikel_Menge" precision="12" scale="0" not-null="true" />
</property>
<property name="summenNetto" type="java.lang.Float">
<column name="Summen_netto" precision="12" scale="0" not-null="true" />
</property>
<property name="lartikelId" type="java.lang.Integer">
<column name="lArtikelID" not-null="true" />
</property>
Wenn ich das lazy="false" in dem set der Auftragstabelle setze, dann werden für die einzelnen Positionen ein SQl Statement geneiert.
Was habe ich vergessen?
Vielen Dank für eure Hife,
Daniel