рел.рез рд╡рд░реНрдгрди

рдЖрдгрд┐ рд╢реЗрд╡рдЯреА, рд╢реЗрд╡рдЯрдЪреА рд░рдгрдиреАрддреА рдкреНрд░рддрд┐ рд╡рд░реНрдЧ рд╕рд╛рд░рдгреА рдЖрд╣реЗ. рдореНрд╣рдгрдЬреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧрд╛рд╕рд╛рдареА рд╕реНрд╡рддрдВрддреНрд░ рддрдХреНрддрд╛ рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдИрд▓. рдПрдХрд╛ рдЕрд░реНрдерд╛рдиреЗ, рд╣реЗ рд╕рдорд╛рди 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рдЖрдгрд┐ рддреНрдпрд╛рдирдВрддрд░рдЪ рдлрд┐рд▓реНрдЯрд░ рдХрд░рд╛.