рдЯреЗрдмрд▓-рд╕реНрддрд░реАрдп рд╕рдВрдмрдВрдз

рдЪрд▓рд╛ рдЖрдордЪреНрдпрд╛ рджреЛрди рдЯреЗрдмрд▓реНрд╕ рдкреБрдиреНрд╣рд╛ рдкрд╛рд╣реВ:

рдЖрдпрдбреА рдирд╛рд╡ рд╡реНрдпрд╡рд╕рд╛рдп рдкрдЧрд╛рд░ рд╡рдп рд░реБрдЬреВ рджрд┐рдирд╛рдВрдХ
рез рдЗрд╡реНрд╣рд╛рдиреЛрд╡реНрд╣ рдЗрд╡реНрд╣рд╛рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ 100000 реирел 2012-06-30
2 рдкреЗрдЯреНрд░реЛрд╡реНрд╣ рдкреЗрддреНрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ 80000 23 2013-08-12
3 рдЗрд╡реНрд╣рд╛рдиреЛрд╡реНрд╣ рд╕реЗрд░реНрдЧреЗ рдкрд░реАрдХреНрд╖рдХ 40000 рддреАрд╕ 2014-01-01
4 рд░рд╛рдмрд┐рдиреЛрд╡рд┐рдЪ рдореЛрдЗрд╢рд╛ рджрд┐рдЧреНрджрд░реНрд╢рдХ 200000 35 2015-05-12
рел рдХрд┐рд░рд┐рдПрдиреНрдХреЛ рдЕрдирд╛рд╕реНрддрд╛рд╕рд┐рдпрд╛ рдХрд╛рд░реНрдпрд╛рд▓рдп рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ 40000 реирел 2015-10-10
6 рд╡рд╛рд╕реНрдХрд╛ рдорд╛рдВрдЬрд░ 1000 3 2018-11-11

рдХрд░реНрдордЪрд╛рд░реА рдЯреЗрдмрд▓:

рдпрд╛ рд╕рд╛рд░рдгреАрдордзреНрдпреЗ рдЦрд╛рд▓реАрд▓ рд╕реНрддрдВрдн рдЖрд╣реЗрдд:

  • рдЖрдпрдбреА INT
  • VARCHAR рдирд╛рд╡
  • рд╡реНрдпрд╡рд╕рд╛рдп рд╡рд░рдЪрд╛
  • рдкрдЧрд╛рд░ INT
  • рд╡рдп INT
  • join_date DATE

рдЖрдгрд┐ рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рдХрд╛рд░реНрдп рд╕рд╛рд░рдгреА , рдЬреНрдпрд╛рдордзреНрдпреЗ рдХрд░реНрдордЪрд╛рд░реНтАНрдпрд╛рдВрд╕рд╛рдареА рдХрд╛рд░реНрдпреЗ рдЖрд╣реЗрдд, рдЕрд╕реЗ рджрд┐рд╕рддреЗ:

рдЖрдпрдбреА рдХрд░реНрдордЪрд╛рд░реА_рдЖрдпрдбреА рдирд╛рд╡ рдЕрдВрддрд┐рдо рдореБрджрдд
рез рез рдлреНрд░рдВрдЯрдПрдВрдбрд╡рд░реАрд▓ рдмрдЧрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рд╛ 2022-06-01
2 2 рдмреЕрдХрдПрдВрдбрд╡рд░реАрд▓ рдмрдЧрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рд╛ 2022-06-15
3 рел рдХреЙрдлреА рд╡рд┐рдХрдд рдШреНрдпрд╛ 2022-07-01
4 рел рдХреЙрдлреА рд╡рд┐рдХрдд рдШреНрдпрд╛ 2022-08-01
рел рел рдХреЙрдлреА рд╡рд┐рдХрдд рдШреНрдпрд╛ 2022-09-01
6 (рдирд┐рд░рд░реНрдердХ) рдСрдлрд┐рд╕рдЪреА рд╕рд╛рдлрд╕рдлрд╛рдИ рдХрд░рд╛ (рдирд┐рд░рд░реНрдердХ)
рен 4 рдЬреАрд╡рдирд╛рдЪрд╛ рдЖрдирдВрдж рдШреЗ (рдирд┐рд░рд░реНрдердХ)
8 6 рдЬреАрд╡рдирд╛рдЪрд╛ рдЖрдирдВрдж рдШреЗ (рдирд┐рд░рд░реНрдердХ)

рдпрд╛ рд╕рд╛рд░рдгреАрдордзреНрдпреЗ рдлрдХреНрдд 4 рд╕реНрддрдВрдн рдЖрд╣реЗрдд:

  • id рд╣реА рдХрд╛рд░реНрдпрд╛рдЪреА рдЕрджреНрд╡рд┐рддреАрдп рд╕рдВрдЦреНрдпрд╛ рдЖрд╣реЗ (рдЖрдгрд┐ рд╕рд╛рд░рдгреАрддреАрд▓ рдкрдВрдХреНрддреА).
  • рдХрд░реНрдордЪрд╛рд░реА_рдЖрдпрдбреА - рдХрд░реНрдордЪрд╛рд▒реНрдпрд╛рдЪреНрдпрд╛ рдЯреЗрдмрд▓рдордзреАрд▓ рдХрд░реНрдордЪрд╛рд▒реНрдпрд╛рдЪрд╛ рдЖрдпрдбреА рдЬреНрдпрд╛рд▓рд╛ рдХрд╛рд░реНрдп рдирд┐рдпреБрдХреНрдд рдХреЗрд▓реЗ рдЖрд╣реЗ.
  • рдирд╛рд╡ - рдХрд╛рд░реНрдпрд╛рдЪреЗ рдирд╛рд╡ рдЖрдгрд┐ рд╡рд░реНрдгрди.
  • рдЕрдВрддрд┐рдо рдореБрджрдд - рдЬреНрдпрд╛ рд╡реЗрд│реЗрдд рдХрд╛рд░реНрдп рдкреВрд░реНрдг рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рдХрд░реНрдордЪрд╛рд░реНтАНрдпрд╛рдВрдЪреНрдпрд╛ рдЯреЗрдмрд▓рдордзреАрд▓ рдПрдХрд▓ рдПрдВрдЯреНрд░реА рдЯрд╛рд╕реНрдХ рдЯреЗрдмрд▓рдордзреАрд▓ рдЕрдиреЗрдХ рдкрдВрдХреНрддреАрдВрджреНрд╡рд╛рд░реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ. рдЕрд╢рд╛ рд╕рд╛рд░рдгреА-рд╕реНрддрд░реАрдп рд╕рдВрдмрдВрдзрд╛рдВрдирд╛ рдПрдХ рддреЗ рдЕрдиреЗрдХ рдореНрд╣рдгрддрд╛рдд .

рдЬрд╛рд╡рд╛ рд╡рд░реНрдЧ рдкрд╛рддрд│реАрд╢реА рд╕рдВрдмрдВрдз

рдЖрдгрд┐ рдЖрдордЪреЗ рд╡рд░реНрдЧ, рдХрд░реНрдордЪрд╛рд░реА рд╡рд░реНрдЧ :

@Entity
@Table(name="user")
class Employee {
   @Column(name="id")
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="occupation")
   public String occupation;

   @Column(name="salary")
   public Integer salary;

   @Column(name="join_date")
   public Date join;
}

рдЖрдгрд┐ EmployeeTask рд╡рд░реНрдЧ рддреНрдпрд╛рдЪреНрдпрд╛ рдореВрд│ рд╕реНрд╡рд░реВрдкрд╛рдд:

@Entity
@Table(name="task")
class EmployeeTask {
   @Column(name="id")
   public Integer id;

   @Column(name="name")
   public String description;

   @Column(name="employee_id")
   public Integer employeeId;

   @Column(name="deadline")
   public Date deadline;
}

@OneToMany рднрд╛рд╖реНрдп

рдЖрдореНрд╣реА рд╕рдВрд╕реНрдерд╛ рд╡рд░реНрдЧрд╛рдВрдордзреАрд▓ рд╕рдВрд╡рд╛рдж рд╡реЗрдЧрд│реНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рдорд╛рдВрдбреВ рд╢рдХрддреЛ.

@ElementCollection рднрд╛рд╖реНрдп рдЖрдард╡рддреЗ рдЬреЗ рдЖрдореНрд╣реА рдкрд╛рд▓рдХ рд╡рд░реНрдЧрд╛рдд рдЪрд╛рдЗрд▓реНрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдЪрд╛ рд╕рдВрдЧреНрд░рд╣ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рд╣реЛрддреЗ? @OneToMany рднрд╛рд╖реНрдпрд╛рд╕рд╣ рдЕрд╕реЗрдЪ рдХрд╛рд╣реАрддрд░реА рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ . рдлрдХреНрдд рдпрд╛рд╡реЗрд│реА, рдХрд░реНрдордЪрд╛рд░реА рд╡рд░реНрдЧ рдмрджрд▓рд▓рд╛ рдЬрд╛рдИрд▓ :

@Entity
@Table(name="user")
class Employee {
   @Column(name="id")
   public Integer id;

   @OneToMany(cascade = CascadeType.ALL)
   @JoinColumn(name = "employee_id")
   private Set<EmployeeTask> tasks = new HashSet<EmployeeTask>();
}

@OneToMany рднрд╛рд╖реНрдп рд╡рд╛рдкрд░реВрди , рдЖрдореНрд╣реА рд╕реВрдЪрд┐рдд рдХреЗрд▓реЗ рдХреА рдСрдмреНрдЬреЗрдХреНрдЯрдХрд░реНрдордЪрд╛рд░реАрдЕрдиреЗрдХ EmployeeTask рд╡рд╕реНрддреВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░реВ рд╢рдХрддрд╛рдд . рддрд╕реЗрдЪ, @JoinColumn рднрд╛рд╖реНрдп рд╡рд╛рдкрд░реВрди , рдЖрдореНрд╣реА рдЯрд╛рд╕реНрдХ рдЯреЗрдмрд▓рдЪреНрдпрд╛ рдХреЛрдгрддреНрдпрд╛ рдХреЙрд▓рдордордзреНрдпреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдпрдбреА рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓рд╛ рдЖрд╣реЗ рд╣реЗ рд╕реВрдЪрд┐рдд рдХреЗрд▓реЗ.рдХрд░реНрдордЪрд╛рд░реА.

рддрдерд╛рдкрд┐, EmployeeTask рд╡рд░реНрдЧрд╛рдд рд╕рд╣рд╕рд╛ рдХрд░реНрдордЪрд╛рд░реА_рдЖрдпрдбреА рд╕реНрддрдВрднрд╛рдЪрд╛ рд╕рдВрджрд░реНрдн рджреЗрдгрд╛рд░реЗ рдлреАрд▓реНрдб рдирд╕рддреЗ. рдЙрджрд╛рд╣рд░рдг:

@Entity
@Table(name="task")
class EmployeeTask {
   @Column(name="id")
   public Integer id;

   @Column(name="name")
   public String description;

   @Column(name="deadline")
   public Date deadline;
}

рдХрд░реНрдордЪрд╛рд░реА_рдЖрдпрдбреА рдлреАрд▓реНрдб рд╣реЗ рд╕реЗрд╡рд╛ рдХреНрд╖реЗрддреНрд░ рдорд╛рдирд▓реЗ рдЬрд╛рддреЗ рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рдореВрд▓реНрдп рд╣рд╛рдпрдмрд░рдиреЗрдЯрджреНрд╡рд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ.

рдЙрджрд╛рд╣рд░рдгрд╛рдВрдЪреА рд╡рд┐рдирдВрддреА рдХрд░рд╛

рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рд╣реА рдХрд╛рд░реНрдпрдХрд░реНрддреНрдпрд╛рд▓рд╛ рдХрд╛рд╣реА рдХрд╛рд░реНрдп рдЬреЛрдбрд╛рдпрдЪреЗ рдЕрд╕реЗрд▓, рддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рдХреЛрдб рд▓рд┐рд╣рд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓:

EmployeeTask task1 = new EmployeeTask();
task1.description = "Do Something Important";
session.persist(task1);

EmployeeTask task2 = new EmployeeTask();
task2.description = "Nothing to do";
session.persist(task2);
session.flush();

Employee director = session.find(Employee.class, 4);
director.tasks.add(task1);
director.tasks.add(task2);

session.update(director);
session.flush();

рдкреНрд░рдердо, рдЖрдореНрд╣реА рджреЛрди EmployeeTask рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рддрдпрд╛рд░ рдХрд░рддреЛ , рддреНрдпрд╛рдВрдирд╛ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рд╕реЗрд╡реНрд╣ рдХрд░рддреЛ рдЖрдгрд┐ рдлреНрд▓рд╢() рдкрджреНрдзрддреАрд▓рд╛ рдХреЙрд▓ рдХрд░рддреЛ рдЬреЗрдгреЗрдХрд░реВрди INSERT рдСрдкрд░реЗрд╢рди рдХреЗрд▓реЗ рдЬрд╛рдИрд▓ рдЖрдгрд┐ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдирд╛ ID рдЕрд╕рддреАрд▓.

рдордЧ рдЖрдореНрд╣реА рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдбрд╛рдпрд░реЗрдХреНрдЯрд░ рд╢реЛрдзрддреЛ, рддреНрдпрд╛рдЪреНрдпрд╛рдХрдбреВрди рдЯрд╛рд╕реНрдХ рдлреАрд▓реНрдб рдШреЗрддреЛ рдЖрдгрд┐ рддреНрдпрд╛рд▓рд╛ рджреЛрди рдЯрд╛рд╕реНрдХ рдЬреЛрдбрддреЛ. рдордЧ рдЖрдореНрд╣реА рдбрд╛рдпрд░реЗрдХреНрдЯрд░рд▓рд╛ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рд╕реЗрд╡реНрд╣ рдХрд░рддреЛ. рддреНрдпрд╛рдирдВрддрд░, рдХрд░реНрдордЪрд╛рд░реА_рдЖрдпрдбреА рд╕реНрддрдВрднрд╛рддреАрд▓ рдирд╡реАрди рдХрд╛рд░реНрдпрд╛рдВрд╕рд╛рдареА рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдореВрд▓реНрдп 4 рджрд┐рд╕реЗрд▓ - рдХрд░реНрдордЪрд╛рд░реА рдЯреЗрдмрд▓рдордзреАрд▓ рд╕рдВрдЪрд╛рд▓рдХрд╛рдЪрд╛ рдЖрдпрдбреА.

рдорд╣рддреНрд╡рд╛рдЪреЗ! рдбреЗрдЯрд╛рдмреЗрд╕рдордзреАрд▓ рд╕рд╛рд░рдгреНрдпрд╛ @ManyToOne рдЖрдгрд┐ @OneToMany рднрд╛рд╖реНрдпрд╛рдВрд╕рд╛рдареА рд╕рдорд╛рди рдЖрд╣реЗрдд . рдкрдг рдпрд╛ рдЯреЗрдмрд▓реНрд╕рдЪреЗ Java рд╡рд░реНрдЧ рд╡реЗрдЧрд│реЗ рдЖрд╣реЗрдд.