-->
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.  [ 1 post ] 
Author Message
 Post subject: doppelter Primärschlüssel gleichzeitig Fremdschlüssel
PostPosted: Fri Aug 03, 2007 4:09 am 
Newbie

Joined: Tue Jul 31, 2007 8:37 am
Posts: 12
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!


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

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.