Frage

Mit Hibernate können Sie eine Composite-ID erstellen, in dem eine der Spalten, die Sie auf die ID zuordnen Nullwerte haben können?

Dies ist mit einer Legacy-Tabelle beschäftigen, die einen eindeutigen Schlüssel hat, die Nullwerte, aber keine Primärschlüssel haben.

Ich weiß, dass ich gerade eine neue Primärschlüsselspalte der Tabelle hinzufügen könnte, aber ich frage mich, ob es einen Weg, dies zu tun zu vermeiden.

War es hilfreich?

Lösung

Nein. Primärschlüssel kann nicht null sein.

Andere Tipps

Dies ist nicht ratsam. Könnten Sie, dass stattdessen eine Ansicht und Karte verwenden? Sie könnten COALESCE verwenden einen Standard zu liefern, wenn Sie mit Altdaten stecken geblieben sind. Wir hatten viele Probleme mit zusammengesetzten Schlüsseln und ich denke, Nullwerte noch mehr Probleme verursachen wird.

Für zusammengesetzte Schlüssel (angenommen, dass Datenbank nulls in PKs erlaubt) können Sie maximal number_of_cols haben ^ 2 - 1 Einträge nulls, (zum Beispiel für Verbundschlüssel von 2 Spalten 3 Zeilen kann in ihrem Primärschlüssel null ist, die vierte ist die PK ohne NULL-Werte).

Warum wollen Sie das tun? Ihre Composite-ID sollte der Primärschlüssel der Tabelle abzubilden, und es nicht klug klingen Nullwerte in einem Schlüssel zu setzen, nicht wahr?

EDIT: Ruhezustand nicht erlaubt, dies zu tun; Sie können die Eigenschaft außerhalb des Schlüssels setzen und die DAO ein wenig zwicken, das Feld zu berücksichtigen, wo immer erforderlich

nehmen

Sie erhalten gewohnt Fehler aber Hibernate nicht in der Lage sein, diese Zeilen mit NULL-Wert für Composite-Spalte zu Ihrer Entity abzubilden. Das heißt, Sie Entität mit NULL-Werte in Ergebnis.

Leider nein. Ich hatte entweder eine Abhilfe zu verwenden:

Ich habe Composit Id für eine Ansicht (! Nicht Tabelle), wo Reihen (A, B) von 2 cols genau identifiziert werden. Obwohl einer der cols (B) sowie positive ganze Zahlen Null-Werte haben. Also meine Abhilfe ist, dass ich eine neue Spalte in der Ansicht erstellt: „BKEY“ und meine Sicht geschrieben ist, als ob B null ist dann Wert von BKEY -1 sonst BKEY = B. (Es wird nur positive ganze Zahlen occour in B und null). Ich habe auch meine Composit id Implementierung BKEY anstelle von B. zu verwenden Hoffe, es hilft jemand ..

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top