SQL JPA – Mehrere Spalten als Primärschlüssel

Lesezeit: 2 Minuten

Wenn ich möchte, dass mehrere Spalten eine ID bilden.

SQL-Beispiel:

CONSTRAINT [PK_NAME] PRIMARY KEY ([Column1],[Column2],[Column3])

Wie kann ich das mit einer Jpa-Entity-Klasse machen? durch Spaltendefinition ?

Setzen Sie einfach das ID-Feld wie folgt:

value = Column1 + Column2 + Column3 // aint working.

Benutzeravatar von Raul Cuth
Raúl Cuth

Sie müssen eine Klasse für Ihren zusammengesetzten Schlüssel haben:

public class CompositeKey implements Serializable {
    private int column1;
    private int column2;
    private int column3;
}

und verwenden Sie dann in Ihrer Entitätsklasse die @IdClass Anmerkung:

@Entity
@IdClass(CompositeKey.class)
public class EntityExample {
    @Id
    private int column1;
    @Id
    private int column2;
    @Id
    private int column3;
    ...
    ...
}

Ich denke, das sollte funktionieren.

Es gibt auch die andere Lösung, die @jklee erwähnt hat. Beides geht, ist Geschmackssache.

Benutzeravatar von jklee
jklee

Verwenden @Embeddable Und @EmbeddedId.

Beispiel:

@Entity
public class Project implements Serializable {
    @EmbeddedId ProjectId id;
}
 
@Embeddable
class ProjectId implements Serializable {
    int departmentId;
    long projectId;
}

Weitere Informationen hier http://www.objectdb.com/java/jpa/entity/id#Embedded_Primary_Key_

  • Vergessen Sie nicht, Serializable zu implementieren 😉

    – Diego Souza

    8. Januar 2020 um 23:56 Uhr

Wenn alle Felder in der Klasse Teil des Primärschlüssels sind, wäre die Lösung ziemlich einfach (erweiternde Lösung von @raul-cuth):

@Entity
@IdClass(EntityExample.class)
public class EntityExample implements Serializable {

    @Id
    private int column1;

    @Id
    private int column2;

    @Id
    private int column3;
}

  • Was ist, wenn eines der Felder ein FK ist? Dies wäre ein typisches Szenario beim Mapping eines Many-to-Many Beziehung Tisch.

    – Paulo Merson

    13. Dezember 2022 um 18:28 Uhr

Benutzeravatar von Pinguin
Pinguin

  1. Verwenden @IdClass Anmerkung auf der @Entity Klasse gefolgt von @Id Anmerkung zu einzelnen Feldern, die Teil des zusammengesetzten Primärschlüssels sind.
  2. Alternativ nutzen können @Embeddable Klasse, die aus einzelnen Feldern des zusammengesetzten Primärschlüssels bestehen kann und dann eine Referenz dieser Klasse als Attribut mit verwendet werden kann @Embedded Anmerkung hinein @Entity Klasse. Hoffe das hilft.

Beachten Sie, dass der Hibernate-Entity-Class-to-SQL-DDL-Script-Generator alle Felder sortiert und unabhängig von der Reihenfolge, in der sie in den Definitionen erscheinen, die Tabellendefinition und die Index- / Constraint-Definitionen in dieser Sortierung erstellt Reihenfolge der Felder.

Während die Reihenfolge der Felder in der Tabellendefinition möglicherweise keine große Rolle spielt, spielt die Reihenfolge der Felder in einem zusammengesetzten Index definitiv eine Rolle. Daher müssen Ihre Schlüsselfelder so benannt werden, dass sie, wenn sie nach ihren Namen sortiert werden, in der Reihenfolge sind, die Sie für den Index wünschen).

1444600cookie-checkSQL JPA – Mehrere Spalten als Primärschlüssel

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy