Verbundener Tisch

All lectures for DE purposes
Level 1, Lektion 326
Verfügbar

Beschreibung

Eine andere Strategie zum Speichern einer Klassenhierarchie in einer Datenbank heißt Joined Table. Dazu gibt es eine besondere Anmerkung:

@Inheritance(strategy = InheritanceType.JOINED)

Ein Beispiel unserer Kurse:

@Inheritance(strategy = InheritanceType.JOINED)
@Entity
class User {
  int id;
  String name;
  LocalDate birthday;
}
@Entity
class Employee extends User {
 	String occupation;
 	int salary;
 	LocalDate join;
}
@Entity
class Client extends User {
   String address;
}

Bei Verwendung dieser Annotation erwartet Hibernate für jede Klasse und ihre Unterklassen eine separate Tabelle in der Datenbank. Wenn Sie Daten daraus auswählen, müssen Sie den SQL JOIN-Operator verwenden.

Beispiel für ein Datenbankschema:

CREATE TABLE user {
  id INT,
  name VARCHAR,
  birthday DATE
}
CREATE TABLE employee {
  id INT,
  occupation VARCHAR,
  salary INT,
  join DATE
}
CREATE TABLE client {
  id INT,
  address VARCHAR
}

Wenn Sie sich entscheiden, die Daten eines Clients aus der Tabelle abzurufen, muss Hibernate JOIN verwenden, um die Tabellen zu verbinden:

SELECT u.id, u.name, u.birthday, c.address FROM user u JOIN client c ON u.id = c.id;

@PrimaryKeyJoinColumn

Untergeordnete Entity-Klassen verfügen über eine Spalte in der Tabelle, die auf die Objekt-ID der übergeordneten Entity-Klasse verweist. Der Name dieser Spalte entspricht standardmäßig dem Namen der Spalte der übergeordneten Klasse.

Beispiel:

@Inheritance(strategy = InheritanceType.JOINED)
@Entity
class User {
  @Id
  int user_identifier;
  String name;
  LocalDate birthday;
}
@Entity
class Employee extends User {
 	String occupation;
 	int salary;
 	LocalDate join;
}
@Entity
class Client extends User {
   String address;
}

Dann sieht die Datenbanktabelle so aus:

CREATE TABLE user {
  user_identifier INT,
  name VARCHAR,
  birthday DATE
}
CREATE TABLE employee {
  user_identifier INT,
  occupation VARCHAR,
  salary INT,
  join DATE
}
CREATE TABLE client {
  user_identifier INT,
  address VARCHAR
}

Wenn Sie den Spaltennamen in abhängigen Tabellen überschreiben möchten, müssen Sie die Annotation @PrimaryKeyJoinColumn verwenden . Beispiel:

@Inheritance(strategy = InheritanceType.JOINED)
@Entity
class User {
  @Id
  int user_identifier;
  String name;
  LocalDate birthday;
}
@Entity
@PrimaryKeyJoinColumn(name=”user_id”)
class Employee extends User {
 	String occupation;
 	int salary;
 	LocalDate join;
}
@Entity
@PrimaryKeyJoinColumn(name=”user_id2”)
class Client extends User {
   String address;
}

Dann sieht die Datenbanktabelle so aus:

CREATE TABLE user {
  user_identifier INT,
  name VARCHAR,
  birthday DATE
}
CREATE TABLE employee {
  user_id INT,
  occupation VARCHAR,
  salary INT,
  join DATE
}
CREATE TABLE client {
  user_id2 INT,
  address VARCHAR
}
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION