рел.рез рд╡рд░реНрдгрди
рдЖрдгрд┐ рд╢реЗрд╡рдЯреА, рд╢реЗрд╡рдЯрдЪреА рд░рдгрдиреАрддреА рдкреНрд░рддрд┐ рд╡рд░реНрдЧ рд╕рд╛рд░рдгреА рдЖрд╣реЗ. рдореНрд╣рдгрдЬреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧрд╛рд╕рд╛рдареА рд╕реНрд╡рддрдВрддреНрд░ рддрдХреНрддрд╛ рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдИрд▓. рдПрдХрд╛ рдЕрд░реНрдерд╛рдиреЗ, рд╣реЗ рд╕рдорд╛рди MappedSuperClass рдЖрд╣реЗ, рдХреЗрд╡рд│ рдПрдХрд╛ рдЕрджреНрдпрдпрд╛рд╡рдд рд╕реНрд╡рд░реВрдкрд╛рдд.
рдкреНрд░рдердо, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рднрд╛рд╖реНрдп рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ:
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
рдпрд╛ рднрд╛рд╖реНрдпрд╛рд╕рд╣ рд╡рд░реНрдЧ рдпрд╛рд╕рд╛рд░рдЦреЗ рджрд┐рд╕рддреАрд▓:
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@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;
}
рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧрд╛рд╕рд╛рдареА рд╡реЗрдЧрд│реЗ рдЯреЗрдмрд▓. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╣реЗ:
CREATE TABLE user {
id INT,
name VARCHAR,
birthday DATE
}
CREATE TABLE employee {
id INT,
name VARCHAR,
birthday DATE,
occupation VARCHAR,
salary INT,
join DATE
}
CREATE TABLE client {
id INT,
name VARCHAR,
birthday DATE,
address VARCHAR
}
рдореБрдЦреНрдп рдлрд░рдХ рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рд╕рд░реНрд╡ рдЯреЗрдмрд▓рд╕рд╛рдареА рдкрд╛рд╕-рдереНрд░реВ рдЖрдпрдбреА (рдкреНрд░рд╛рдердорд┐рдХ рдХреА) рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддреЗ. рддреБрдордЪреНрдпрд╛рдХрдбреЗ рд╕рдорд╛рди рдЖрдпрдбреА рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдкрдВрдХреНрддреА рдЕрд╕реВ рд╢рдХрдд рдирд╛рд╣реАрдд, рдХреЗрд╡рд│ рдПрдХрд╛рдЪ рдЯреЗрдмрд▓рдордзреНрдпреЗрдЪ рдирд╛рд╣реА рддрд░ рдЯреЗрдмрд▓рдЪреНрдпрд╛ рдпрд╛ рдЧрдЯрд╛рдордзреНрдпреЗ рджреЗрдЦреАрд▓. рд╣рд╛рдпрдмрд░рдиреЗрдЯ рдпрд╛рдЪреА рдХрд╛рд│рдЬреА рдШреЗрдИрд▓.
5.2 рдЙрджрд╛рд╣рд░рдгреЗ
рд╣реЗ рд╕рд░реНрд╡ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реЗ рдкрд╛рд╣рдгреЗ рдЦреВрдк рдордиреЛрд░рдВрдЬрдХ рдЖрд╣реЗ.
рд╕рд░реНрд╡ рд╡рд╛рдкрд░рдХрд░реНрддреЗ рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рдПрдХ рд╕рд╛рдзреА HQL рдХреНрд╡реЗрд░реА рд▓рд┐рд╣реВ рд╢рдХрддрд╛: рд╡рд╛рдкрд░рдХрд░реНрддрд╛, рдХрд░реНрдордЪрд╛рд░реА, рдХреНрд▓рд╛рдпрдВрдЯ :
List<User> accounts = session.createQuery("from User").list();
рдкрд░рдВрддреБ рд╣рд╛рдпрдмрд░рдиреЗрдЯ, рдпрд╛рдордзреВрди, рдПрдХ рдЕрддрд┐рд╢рдп рдордиреЛрд░рдВрдЬрдХ рдХреНрд╡реЗрд░реА рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрд▓. рддреЗ рд╕рд░реНрд╡ рд╕рд╛рд░рдгреНрдпрд╛рдВрдордзреВрди рдирд┐рд╡рдб рдХрд░реЗрд▓, рдирдВрддрд░ рддреЗ UNION ALL рджреНрд╡рд╛рд░реЗ рдПрдХрд╛ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рдЖрднрд╛рд╕реА рдЯреЗрдмрд▓рдордзреНрдпреЗ рдПрдХрддреНрд░ рдХрд░реЗрд▓ рдЖрдгрд┐ рддреНрдпрд╛рдирдВрддрд░рдЪ рддреЗ рд╢реЛрдзреЗрд▓ рдЖрдгрд┐/рдХрд┐рдВрд╡рд╛ рдирд┐рд╡рдбреЗрд▓
рдкрд░рдВрддреБ рднрд┐рдиреНрди рд╕реНрддрдВрднрд╛рдВрд╕рд╣ рд╕рд╛рд░рдгреНрдпрд╛ рд╡рд┐рд▓реАрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреНрдпрд╛рдВрдирд╛ рдкреНрд░рдердо рдмрдирд╛рд╡рдЯ рд╕реНрддрдВрднрд╛рдВрд╕рд╣ рдкреВрд░рдХ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд╕рд╛рд░рдгреА рд╕реНрддрдВрднрд╛рдВрд╕рд╣ рдкреВрд░рдХ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:
occupation VARCHAR
salary INT
join DATE
address VARCHAR
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд╕рд╛рд░рдгреАрд╕рд╛рдареА SQL рдХреНрд╡реЗрд░реАрдЪреЗ рдЙрджрд╛рд╣рд░рдг UNION ALL
:
SELECT id,
name,
birthday,
CAST(NULL AS VARCHAR) AS occupation,
CAST(NULL AS INT) AS salary,
CAST(NULL AS DATE) AS join,
CAST(NULL AS VARCHAR) AS address,
0 AS clazz
FROM user
рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдкреВрд░реНрд╡реА рдХрд░реНрдордЪрд╛рд░реНтАНрдпрд╛рдВрдЪреНрдпрд╛ рдЯреЗрдмрд▓рд╡рд░ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреНрд╡реЗрд░реАрдЪреЗ рдЙрджрд╛рд╣рд░рдг UNION ALL
:
SELECT id,
name,
birthday,
occupation,
salary,
join,
CAST(NULL AS VARCHAR) AS address,
1 AS clazz
FROM employee
рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдкреВрд░реНрд╡реА рдХреНрд▓рд╛рдпрдВрдЯ рдЯреЗрдмрд▓рд╡рд░ SQL рдХреНрд╡реЗрд░реАрдЪреЗ рдЙрджрд╛рд╣рд░рдг UNION ALL
:
SELECT id,
name,
birthday,
CAST(NULL AS VARCHAR) AS occupation,
CAST(NULL AS INT) AS salary,
CAST(NULL AS DATE) AS join,
address,
2 AS clazz
FROM client
рдЪрд╛рдВрдЧрд▓реА рдмрд╛рддрдореА рдЕрд╢реА рдЖрд╣реЗ рдХреА HQL рдХреНрд╡реЗрд░реА рддреБрдореНрд╣рд╛рд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ рддрд╕реЗ рдХрд╛рдо рдХрд░рддреАрд▓.
рд╡рд╛рдИрдЯ рдмрд╛рддрдореА рдЕрд╢реА рдЖрд╣реЗ рдХреА рдЯреЗрдмрд▓рдордзреНрдпреЗ рднрд░рдкреВрд░ рдбреЗрдЯрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕ рддреЗ рдзреАрдореЗ рдЕрд╕реВ рд╢рдХрддрд╛рдд. рдХрд╛рд░рдг рдкреНрд░рдердо рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд░реНрд╡ рд╕рд╛рд░рдгреНрдпрд╛рдВрдордзреВрди рдбреЗрдЯрд╛ рдирд┐рд╡рдбрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдирдВрддрд░ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдкрдВрдХреНрддреА рдПрдХрддреНрд░ рдХрд░рд╛ UNION ALL
рдЖрдгрд┐ рддреНрдпрд╛рдирдВрддрд░рдЪ рдлрд┐рд▓реНрдЯрд░ рдХрд░рд╛.