Leírás
Egy másik stratégia az osztályhierarchia adatbázisban való tárolására a Joined Table. Van hozzá egy speciális megjegyzés:
@Inheritance(strategy = InheritanceType.JOINED)
Példa az osztályainkra:
@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;
}
Ennek a megjegyzésnek a használatakor a Hibernate külön táblázatot vár az adatbázisban minden osztályhoz és alosztályaihoz. Az adatok kiválasztásakor az SQL JOIN operátort kell használnia.
Adatbázisséma példa:
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
}
Ha úgy dönt, hogy valamelyik kliens adatait lekéri a táblából, akkor a Hibernate-nek a JOIN-t kell használnia a táblák összekapcsolásához:
SELECT u.id, u.name, u.birthday, c.address FROM user u JOIN client c ON u.id = c.id;
@PrimaryKeyJoinColumn
A Child Entity osztályoknak van egy oszlopa a táblázatban, amely a szülő Entity osztály objektumazonosítójára hivatkozik. Ennek az oszlopnak a neve alapértelmezés szerint megegyezik a szülőosztály oszlopának nevével.
Példa:
@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;
}
Ekkor az adatbázistábla így fog kinézni:
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
}
Ha felül szeretné írni az oszlop nevét a függő táblákban, akkor a @PrimaryKeyJoinColumn megjegyzést kell használnia . Példa:
@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;
}
Ekkor az adatbázistábla így fog kinézni:
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
}
GO TO FULL VERSION