-->
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.  [ 6 posts ] 
Author Message
 Post subject: 1:n ohne foreign-keys
PostPosted: Fri May 26, 2006 1:05 pm 
Newbie

Joined: Tue Sep 06, 2005 11:11 am
Posts: 11
Location: Germany
Hallo,

ich habe folgenden Situation:

- eine Tabelle "Bestellungen"; Key: orno (für ordernumber)
- eine Tabelle "Positionen"; Key: orno, pono (für ordernumber und position)

Es gibt nur diese "natürlichen" Schlüssel, foreign-keys gibt es auch nicht!
Die Tabelle "Positionen" enthält natürlich die Positionen einer Bestellung, also 1:n -Beziehung.

Da in Hibernate (z.Z. Hibernate 3) die meisten Beispiele mit technischen Schlüsseln sind, habe ich so gar keine Vorstellung, wie das Mapping in diesem Fall aussehen sollte.

Gibt es hierzu Vorschläge?

Vielen Dank


Top
 Profile  
 
 Post subject: Re: 1:n ohne foreign-keys
PostPosted: Sat May 27, 2006 12:07 pm 
Newbie

Joined: Mon Jul 25, 2005 11:30 am
Posts: 4
spartacus1957 wrote:
[..]
Es gibt nur diese "natürlichen" Schlüssel, foreign-keys gibt es auch nicht!
[..]


Das ist natürlich schlecht... aber ist Hibernate das nicht egal? Die naheliegende Vorgehensweise wäre doch, im Mapping für "Bestellungen", ungefähr sowas wie:

Code:
   <set name="positionen">
         <key column="orno"  />
         <one-to-many
            class="com.example.Positionen" />
      </set>


Geht das nicht? "orno" ist ja semantisch ein foreign key, auch wenn in deiner Datenbank kein entsprechender constraint existiert.

hth,

Lutz


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jun 08, 2006 4:52 pm 
Newbie

Joined: Tue Sep 06, 2005 11:11 am
Posts: 11
Location: Germany
Hi Lutz,

vielen Dank für die Antwort. Ich habe erst mal Versuche mit technischen Schlüsseln und Foreing-Keys zu machen. Da gibt es wohl mehr Beispiele.

Was Deinen Vorschlag betrifft: Der Key der Positionen würde sich ja aus den Komponenten "orno" und "pono" zusammensetzen. Ich denke mal ich müßte dann beide Komponenten des Keys irgendwie eintragen.

Code:
key column="orno"


dürfte ja nicht reichen,oder?


Vielen Dank,
Richard


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jul 06, 2006 3:32 am 
Newbie

Joined: Wed Jul 05, 2006 8:49 am
Posts: 7
Location: Zurich
Bei den Bestellungen ist orno doch ein technischer Schlüssel. Für Positionen kann ein zusammengesetzter Schlüssel gemacht werden. Das sieht im Mapping ungefähr so aus:

<composite-id>
<key-property name="orno" column="ornotype="long"/>
<key-property name="pono" column="pono" type="long"/>
</composite-id>

Wie es genau geht, steht im Buch Hibernate in Action oder in der Reference Documentation zum download.

Dies ist aber nur für die Identität der Objekte relevant. Für die Beziehung reicht es, wenn man die beiden orno schlüssel verknüpft. Steht ebenfalls in der Reference Documentation.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jul 09, 2006 6:09 am 
Newbie

Joined: Tue Sep 06, 2005 11:11 am
Posts: 11
Location: Germany
Hi Jolt,

stimmt, eine EINZELNE Composite-ID habe ich auch schon so zusammengebaut. Mein Problem ist es dann eine One-to-many Beziehung zu realisieren. Wie würde das komplette Mapping aussehen, wenn orno/pono der zusammengesetzte Schlüssel der Sub-Klasse(Tabelle) ist und orno der Schlüssel der Oberklasse. So gesehen sollen das einmal Bestellkopfdaten sein und einmal Bestellpositionen. "orno" wäre die Bestellnummer und "pono" eben die Bestellposition.

Btw: In dem Fall ist orno aber schon ein fachlicher Schlüssel, oder?

Danke
Richard


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jul 10, 2006 5:01 am 
Beginner
Beginner

Joined: Fri May 19, 2006 11:34 am
Posts: 29
Hallo Richard,

die Lösung <composite-id> ist schon richtig.
Allerdings musst du um <key-many-to-one> erweitern.

Ich versuche es mal umzusetzen.

Code:
      <composite-id name="id" class="was_auch_immer">
         <key-many-to-one name="orno" class="OrderHead" column="orno" />
         <key-property name="pono" column="pono" type="..."></key-property>
      </composite-id>


Müsstest du noch entsprechend anpassen.

Viele Grüsse
kai


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

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.