Hallo!
Ich bin noch ziemlich neu im Gebiet, und habe ein Problem, was ich allerdings bereits gelöst habe, nun die Frage, ob diese Lösung Hibernate-konform bzw. best Practises entspricht.
Folgende Situation:
Ich habe eine Tabelle B, die einen kombinierten Primärschlüssel (2er)besitzt, der gleichzeitig 2 Fremdschlüssel auf Tabelle A und C enthält:
Code:
A: A_ID(PK)
attrA
B: A_ID(PK,FK)
C_ID(PK,FK)
attrB
C: C_ID(FK)
attrC
Diese Situation ist ja schon Zuhauf aufgetreten, und auch erklärt worden.
Allerdings ergaben die Lösungen bei mir ein Performance Problem.
Das MappingFile für Tabelle B - Klasse B sieht folgendermaßen aus:
Code:
<hibernate-mapping>
<class name="B" table="B">
<!--
Composite Schlüssel muss sein, da der Schlüssel gleichzeitig FK ist -->
<composite-id name="ABC_ID" class="ABCKey">
<key-many-to-one name="C" column="C_ID" class="C" />
<key-many-to-one name="A" column="A_ID" class="A"/>
</composite-id>
<!-- interessanter Teil -->
<many-to-one name="C" insert="false" update="false" fetch="join" column="C_ID"/>
<many-to-one name="A" insert="false" update="false" fetch="join" column="A_ID"/>
<!-- weitere Attribute: -->
<property name="attr1" type="int">
<column name="attr1" sql-type="Number(3)"/>
</property>
</class>
</hibernate-mapping>
Wichtig ist der "interessante Teil". Ohne diesen Teil, ist es nicht möglich die Fremdschlüssel C und A als fetch="join" zu laden!
Ist dies richtig, oder gibt es einen anderen Weg, dass die Fremdschlüssel nicht bei jedem laden einen SQl Aufruf erzeugen.
Ohne das fetch="join" Attribut dauert die Abfrage um ein vielfaches länger, als mit diesem Attribut.
Wäre für Tipps, oder Bestätigungen dankbar!