CodeGym/Java Course/All lectures for HI purposes/рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рддрд┐ рд╡рд░реНрдЧ

рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рддрд┐ рд╡рд░реНрдЧ

рдЙрдкрд▓рдмреНрдз

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, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ
  • рд▓реЛрдХрдкреНрд░рд┐рдп
  • рдирдпрд╛
  • рдкреБрд░рд╛рдирд╛
рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╕рд╛рдЗрди рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛
рдЗрд╕ рдкреЗрдЬ рдкрд░ рдЕрднреА рддрдХ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВ