# Hibernate Composite-ID mit Autogenerated Value



## Reggie (29. Okt 2010)

Tach!

Also dieses Thema wurde schon Lang und Breit in allen möglichen Foren diskutiert. Aber nirgendwo habe ich eine anständige Lösung gefunden.

Ich versuche für eine Webapplication einen Adressstamm für mehrere Firmen in einer Tabelle zu erstellen.
Deswegen brauche ich eine Composite ID (MandantNr,AdressNr) und möchte eigentlich für jede Firma fortlaufende Adressnummern.

Das Problem: hibernate bietet keine Autogenerated Values in Embedded-ID's. Ich kann mir leider keine performante Application vorstellen wo ich vor jedem Insert erst noch die Datenbank fragen muss "Wie ist den die höchste AdressNr des aktuellen Mandanten?" und erst dann den Insert zu tätigen und evt hat zwischenzeitlich dann schon jemand diese Id weggeschnappt im schlimmsten Fall.

Sieht jemand noch eine andere Lösung?

@A0027301: Jo habs gleich nachher gesehn. Danke. Hab den Thread komplett geändert.


----------



## A0027301 (29. Okt 2010)

beans.ContactId 

meint Hibernate


----------



## A0027301 (29. Okt 2010)

Weiss ja nicht was schon diskutiert wurde. Mal paar Anreißer:

- Die ID in Hibernate dient zur Identifikation des jeweiligen Objektes
- Daten der Gschäftslogik (hier  Composite ID [was immer das ist?]) sollten nicht Grundlage für Verwaltungsdaten der DB sein -> ID
- Warum muss hier die ID eine "aufsteigende Nummer" sein? Wahrscheinlich lässt sich das einfach mit einer UUID lösen, die vergeben wird (im Konstruktor). Diese ist dann das Verbindungsglied zwischen den Daten und hat mit einer Hibernate-ID nichts zu tun


----------



## Reggie (29. Okt 2010)

Naja aber die Id ist ja immer der primary Key der Datenbank. Composite-ID ist ein primary Key bestehend aus 2 oder mehr Columns, worin hibernate keine autogenerated Values erlaubt. 

Aber ich glaub ich muss das komplette Datenbank Schema nochmals überdenken.

Ich habe grundsätzlich das Problem dass ich alle Daten für mehrere Firmen bereitstellen muss, mein erster gedanke war die Tables pro Mandant zu machen aber auch da spielt hibernate nicht mit, ausser ich mache für jeden Mandant eine Klasse, was nicht geht da es n Mandanten geben kann.

Falls irgendwer noch Gedankensanstösse zu obiger Problematik hat, würde ich sie gerne hören.


----------

