5.1 рд╡рд┐рд╡рд░рдг
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЕрдВрддрд┐рдо рд░рдгрдиреАрддрд┐ рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рддрд┐ рд╡рд░реНрдЧ рд╣реИред рдпрд╛рдиреА рд╣рд░ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рдЯреЗрдмрд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рдЕрд░реНрде рдореЗрдВ, рдпрд╣ рд╡рд╣реА рдореИрдкреНрдбрд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рдЕрджреНрдпрддрди рд░реВрдк рдореЗрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
@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 рдЙрджрд╛рд╣рд░рдг
рдпрд╣ рджреЗрдЦрдирд╛ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЖрдк рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдПрдЪрдХреНрдпреВрдПрд▓ рдХреНрд╡реЗрд░реА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдХрд░реНрдордЪрд╛рд░реА, рдЧреНрд░рд╛рд╣рдХ :
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
рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдкрд╣рд▓реЗ рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг SQL рдХреНрд╡реЗрд░реА 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
рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рдПрдЪрдХреНрдпреВрдПрд▓ рдкреНрд░рд╢реНрди рдЖрдкрдХреЗ рдЗрдЪреНрдЫрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
рдмреБрд░реА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рд╣реИ рддреЛ рд╡реЗ рдзреАрдореЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд╕рднреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдлрд┐рд░ рдЙрдирдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ UNION ALL
, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред