Hibernate Composite Key

8

Ist es notwendig, dass composite-id der Klasse zugeordnet werden soll?

kann es so sein?

%Vor%

oder sollte

sein %Vor%

Sollte das notwendig sein, dass, wenn wir einen zusammengesetzten Schlüssel haben, diese Klasse equals() und override() Methode implementieren soll?

    
Senthilnathan 20.02.2010, 06:03
quelle

3 Antworten

26

Hibernate muss Kennungen vergleichen und serialisieren können. Daher muss die Bezeichnerklasse serialisierbar sein und hashCode () und equals () in Übereinstimmung mit dem Begriff der zusammengesetzten Schlüsselgleichheit der Datenbank überschreiben.

Wenn Sie eine zusammengesetzte ID als Eigenschaften der Entität zugeordnet haben, ist die Entität selbst die ID.

Ein zweiter Ansatz wird als gemappter zusammengesetzter Bezeichner bezeichnet, wobei die innerhalb der & lt; composite-id & gt; Element werden sowohl in der persistenten Klasse als auch in einer separaten Bezeichnerklasse

dupliziert

Schließlich kann eine Composite-ID eine Komponentenklasse sein. In diesem Fall ist die Komponentenklasse die Bezeichnerklasse.

Beachten Sie, dass es dringend empfohlen wird, die ID als separate Klasse zu verwenden. Andernfalls haben Sie nur sehr ungünstige Möglichkeiten, Ihr Objekt mit session.get () oder session.load () zu suchen.

Relevante Abschnitte der Referenzdokumentation:

In diesem Beispiel wird eine Composite-ID als Eigenschaften der Entität zugeordnet. (Angenommen, Sie definieren die Klasse Employee).

%Vor%

Eine zugeordnete Composite-ID:

%Vor%

Eine Komponente als eine zusammengesetzte ID:

%Vor%     
Lachlan Roche 20.02.2010 06:34
quelle
4

Beides ist möglich. Wenn Sie

verwenden %Vor%

Dann ist keine separate Klasse erforderlich, um den Schlüssel darzustellen. Die ID-Werte werden den Eigenschaften der Entität selbst entnommen.

Wenn Sie

verwenden %Vor%

Dann wird die angegebene Klasse als Halter für die Schlüsseleigenschaften verwendet. Die Entitätsklasse muss jedoch auch diese Eigenschaften besitzen - die Werte werden sowohl in der Entitätsklasse als auch in der zusammengesetzten ID-Klasse gespeichert. Die Entitätsklasse kennt die Schlüsselklasse nicht. Nicht sehr nett, meiner Meinung nach.

Es gibt einen schöneren dritten Ansatz, der in den Dokumenten hier :

%Vor%

Hier wird der zusammengesetzte Schlüssel durch die Klasse OrderLineId repräsentiert, von der eine Instanz unter dem Feld id in der Entitätsklasse gespeichert ist. Dies hält die Trennung zwischen Entity und Key sauberer.

    
skaffman 28.02.2010 16:19
quelle
2

Wenn Sie einen zusammengesetzten Schlüssel haben, der Beziehungen zu anderen Entitäten enthält, machen Sie das folgendermaßen:

%Vor%     
Marc 21.02.2012 11:38
quelle

Tags und Links