-->
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.  [ 7 posts ] 
Author Message
 Post subject: Zusammengesetzte Primärschlüssel und generator class
PostPosted: Mon Mar 06, 2006 9:58 am 
Newbie

Joined: Mon Mar 06, 2006 9:48 am
Posts: 5
Hallo,

ich nutzte Hibernate 3 mit MySql zusammen, und bin gerade ein
wenig am verzweifeln. Ich habe eine Tabelle mit einem Primärschlüssel
der sich aus 2 Spalten zusammensetzt:

PrivatID INT NOT NULL AUTO_INCREMENT
BetriebID TINYINT NOT NULL DEFAULT 12

Mein Hibernate mapping dazu:

<class name="de.kartman.objects.PrivatKunde" table="PrivatKunde">
<composite-id name="pk">
<key-property name="primarykey" column="PrivatID">
</key-property>
<key-property name="betriebid" column="BetriebID">
</key-property>
</composite-id>

Dies funktioniert soweit auch! Doch es muss doch möglich sein,
wenn ich einen neuen Kunden anlege, PrivatID von der Datenbank
setzten zu lassen, sprich auto_increment.
Nun habe ich geselen, dass bei zusammengesetzten Primäschlüsseln
kein generator class möglich ist?! Das kann doch nicht sein, oder???

regards

eliotmc


Top
 Profile  
 
 Post subject:
PostPosted: Mon Mar 06, 2006 10:15 am 
Expert
Expert

Joined: Tue Oct 05, 2004 9:45 am
Posts: 263
doch :)

Dein "privatID" identifiziert den Datensatz doch schon eindeutig. Willst Du mit Deiner zweiten Spalte den Datensatz dann noch eindeutiger identifizieren?


Top
 Profile  
 
 Post subject:
PostPosted: Mon Mar 06, 2006 10:22 am 
Newbie

Joined: Mon Mar 06, 2006 9:48 am
Posts: 5
curio wrote:
doch :)

Dein "privatID" identifiziert den Datensatz doch schon eindeutig. Willst Du mit Deiner zweiten Spalte den Datensatz dann noch eindeutiger identifizieren?


Naja, dies muss leider sein, da diese Tabelle in verschiedenen
Firmen auf verschiedenen Servern laufen soll. Die angelegten
Kunden sollen nach "Feierabend" synchronisiert werden,
dazu beötige ich die Betrieb ID, damit die Kundenummer,
welche sich aus diesen beiden Spalten zusammensetzt,
eindeutig bleibt. Die BetriebID ist also je nach Firma unterschiedlich.

Geht das denn wirklich nicht??? :(


Top
 Profile  
 
 Post subject:
PostPosted: Tue Mar 07, 2006 4:40 am 
Expert
Expert

Joined: Tue Oct 05, 2004 9:45 am
Posts: 263
hmmm ... ob Dein Ansatz jetzt der idealste ist, oder nicht, kann ich Dir leider nicht sagen.

Ich bilde mir aber ein sicher zu sein, dass Du bei einer composite-id keinen Generator angeben kannst, da es sich hierbei um einen fachlichen Schlüssel handelt, den der Generator nicht setzen kann.

Ich glaube auch nicht, dass Du das über einen eigenen Generator hinbekommst. Das müsstest Du Dir aber mal anschauen.


Top
 Profile  
 
 Post subject:
PostPosted: Tue Mar 07, 2006 5:52 am 
Beginner
Beginner

Joined: Tue Jul 19, 2005 5:08 am
Posts: 26
Location: Germany
ich würde an deiner stelle die betriebsID nur als normales attribut mitführen, composite id´s sind irgendwie immer etwas verkrampft.
verwende deine energie lieber dazu, dafür zu sorgen, daß deine privateID eindeutig ist, selbst wenn auf zwei untersch. servern zur exakt der gleichen zeit datensätze erzeugt werden. dazu gibt es z.b. den ansatz, daß du in deiner logik zum erzeugen der id irgendwelche hardwareinformationen verwendest. (ip-adresse, mac-adresse o.ä) und schon ist das problem gelöst.

viel erfolg...

arno


Top
 Profile  
 
 Post subject:
PostPosted: Tue Mar 07, 2006 7:54 am 
Newbie

Joined: Mon Mar 06, 2006 9:48 am
Posts: 5
Hallo,

ich habe eine etwas andere Lösung gefunden.
Ich habe einfach noch eine Tabelle Counter erstellt:

Create Table (Counter int auto_increment, PRIMARY KEY Counter)
Type=InnoDB;

Wenn ich eine neuen Kunden anlegen möchte, erstelle ich
zuerst ein Counter, nehme dessen ID, und trage diese
dann einfach als ID für den Kunden ein, die BetriebID
ergibt sich ja weiterhin vom Client. So kann ich die Clients
sysnchron halten, muss aber einmal mehr auf den SQL-Server
zugreifen beim Anlegen eines neuen Kunden.

Prktikabel?? Was meint ihr???
Zumindest funktionierts, ...

BTW Ist aber nicht gerade das Gelbe vom Ei, dass das unter
Hibernate nicht möglich ist, schließlich ist das in jeder
x beliebigen Datenbank kein Thema.
Hier sollte nachgebessert werden, ...

regards

eliotmc


Top
 Profile  
 
 Post subject:
PostPosted: Tue Mar 07, 2006 8:57 am 
Expert
Expert

Joined: Tue Oct 05, 2004 9:45 am
Posts: 263
nichts für ungut, aber ich hoffe mal, dass hier Hibernate nicht nachbessert. Es ist auch mit jeder beliebigen Datenbank möglich Tabellen ohne Primärschlüssel anzulegen ... aber das macht es nicht besser.

Ich kann Dein Problem verstehen, aber ich bin mir sicher, dass es einen besseren Weg gibt, als einen bereits eindeutigen Schlüssel noch eindeutiger machen zu wollen. Dazu gibt es hier, bilde ich mir ein, auch schon diverse Threads.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 7 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.