@OneToOne

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

5.1 рдПрдХ рддреЗ рдПрдХ рд╕рдВрд╡рд╛рджрд╛рдЪреЗ рд╡рд┐рд╡рд┐рдз рдкреНрд░рдХрд╛рд░

рджреЛрди рдШрдЯрдХ рд╡рд░реНрдЧрд╛рдВрдордзреАрд▓ рдирд╛рддреЗрд╕рдВрдмрдВрдзрд╛рдЪреЗ рдЖрдгрдЦреА рдПрдХ рдордиреЛрд░рдВрдЬрдХ рдЖрдгрд┐ рдРрд╡рдЬреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд░рдг рдЖрд╣реЗ - рдПрдХ-рдЯреВ-рд╡рди рд╕рдВрдмрдВрдз.

рдореА рдпрд╛ рдХреЗрд╕рд▓рд╛ рдЕрддрд┐рд╢рдп рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореНрд╣рдгрддреЛ, рдХрд╛рд░рдг рд╣реЗ рдбреЗрдЯрд╛рдмреЗрд╕рдкреЗрдХреНрд╖рд╛ Java рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рдЖрд╣реЗ. рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ, рд╕рд╛рд░рдгреНрдпрд╛рдВрдордзреАрд▓ рд╕рдВрдмрдВрдзрд╛рдВрд╕рд╛рдареА рдлрдХреНрдд рджреЛрди рдкрд░реНрдпрд╛рдп рдЖрд╣реЗрдд:

  • рдЯреЗрдмрд▓ рдкрдВрдХреНрддреАрдордзреНрдпреЗ рджреБрд╕рд▒реНрдпрд╛ рдЯреЗрдмрд▓рдЪреНрдпрд╛ рдЖрдпрдбреАрдЪреА рд▓рд┐рдВрдХ рдЕрд╕рддреЗ.
  • рд╕реЗрд╡рд╛ рд╕рд╛рд░рдгреА рдЕрдиреЗрдХ-рддреЗ-рдЕрдиреЗрдХ рд╕рдВрдмрдВрдзрд╛рдВрд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддреЗ.

рдШрдЯрдХ рд╡рд░реНрдЧрд╛рдВрдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рдЕрд╕реЗ рдкрд░реНрдпрд╛рдп рдЕрд╕реВ рд╢рдХрддрд╛рдд рдЬреНрдпрд╛рдВрдЪреЗ рд╡рд░реНрдгрди рдЕрдиреЗрдХ рднрд╛рд╖реНрдпрд╛рдВрджреНрд╡рд╛рд░реЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ:

  • @рдПрдореНрдмреЗрдбреЗрдб
  • рдПрдХрддрд░реНрдлреА OneToOne
  • рджреНрд╡рд┐рдкрдХреНрд╖реАрдп OneToOne
  • @MapsId

рдЦрд╛рд▓реА рдЖрдореНрд╣реА рддреНрдпрд╛рдкреИрдХреА рд╕рд░реНрд╡рд╛рдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд┐рдЪрд╛рд░ рдХрд░реВ.

5.2 рдПрдореНрдмреЗрдбреЗрдб

рддрд╕реЗ, рдЖрдореНрд╣реА рдЖрдзреАрдЪ рдПрдХ-рдЯреВ-рд╡рди рд╕рдВрдкреНрд░реЗрд╖рдг рдкрд░реНрдпрд╛рдпрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХреЗрд▓рд╛ рдЖрд╣реЗ - рд╣реЗ@Embedded рдПрдХ рднрд╛рд╖реНрдп рдЖрд╣реЗ . рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдПрдХрд╛рдЪ рдЯреЗрдмрд▓рдордзреНрдпреЗ рджреЛрди рд╡рд░реНрдЧ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдЖрд╣реЗрдд.

рд╕рдордЬрд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪрд╛ рдкрддреНрддрд╛ UserAddress рд╡рд░реНрдЧрд╛рдд рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рд╛рдпрдЪрд╛ рдЖрд╣реЗ :

@Embeddable
class UserAddress {
   @Column(name="user_address_country")
   public String country;
   @Column(name="user_address_city")
   public String city;
   @Column(name="user_address_street")
   public String street;
   @Column(name="user_address_home")
   public String home;
}

рдордЧ рдЖрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд╡рд░реНрдЧрд╛рдд рдпрд╛ рдкрддреНрддреНрдпрд╛рд╕рд╣ рдлреАрд▓реНрдб рдЬреЛрдбрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ :

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

   @Embedded
   public UserAddress address;

   @Column(name="created_date")
   public Date createdDate;
}

рд╣рд╛рдпрдмрд░рдиреЗрдЯ рдмрд╛рдХреАрдЪреЗ рдХрд░реЗрд▓: рдбреЗрдЯрд╛ рдПрдХрд╛ рдЯреЗрдмрд▓рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓, рдкрд░рдВрддреБ HQL рдХреНрд╡реЗрд░реА рд▓рд┐рд╣рд┐рддрд╛рдирд╛, рддреБрдореНрд╣рд╛рд▓рд╛ рдХреНрд▓рд╛рд╕ рдлреАрд▓реНрдбрд╡рд░ рдСрдкрд░реЗрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

HQL рдХреНрд╡реЗрд░реА рдЙрджрд╛рд╣рд░рдг:

select from User where address.city = 'Paris'

5.3 рдПрдХрддрд░реНрдлреА OneToOne

рдЖрддрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдЪреА рдХрд▓реНрдкрдирд╛ рдХрд░рд╛: рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдПрдХ рд╕реНрд░реЛрдд рдЯреЗрдмрд▓ рдХрд░реНрдордЪрд╛рд░реА рдЖрд╣реЗ рдЖрдгрд┐ рдПрдХ рдХрд╛рд░реНрдп рдЖрд╣реЗ рдЬреЗ рдХрд░реНрдордЪрд╛рд░реА рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ. рдкрд░рдВрддреБ рдЖрдореНрд╣рд╛рд▓рд╛ рдЦрд╛рддреНрд░реА рдЖрд╣реЗ рдХреА рдПрдХрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд рдПрдХ рдХрд╛рд░реНрдп рдирд┐рдпреБрдХреНрдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ. рдордЧ рдЖрдкрдг рдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рднрд╛рд╖реНрдп рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ @OneToOne.

рдЙрджрд╛рд╣рд░рдг:

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

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

   @OneToOne
   @JoinColumn(name = "employee_id")
   public Employee employee;

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

рд╣рд╛рдпрдмрд░рдиреЗрдЯ рд╣реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрд▓ рдХреА рдХреЗрд╡рд│ рдПрдХрд╛ рдХрд╛рд░реНрдпрд╛рдордзреНрдпреЗ рдПрдХ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдирд╛рд╣реА рддрд░ рдПрдХрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдХрдбреЗ рдлрдХреНрдд рдПрдХрдЪ рдХрд╛рд░реНрдп рдЖрд╣реЗ. рдЕрдиреНрдпрдерд╛, рд╣реЗ рдкреНрд░рдХрд░рдг рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХрджреГрд╖реНрдЯреНрдпрд╛ рдпрд╛рдкреЗрдХреНрд╖рд╛ рд╡реЗрдЧрд│реЗ рдирд╛рд╣реА @ManyToOne.

5.4 рджреНрд╡рд┐рдкрдХреНрд╖реАрдп OneToOne

рдорд╛рдЧреАрд▓ рдкрд░реНрдпрд╛рдп рдереЛрдбрд╛рд╕рд╛ рдЧреИрд░рд╕реЛрдпреАрдЪрд╛ рдЕрд╕реВ рд╢рдХрддреЛ, рдХрд╛рд░рдг рдмрд░реНтАНрдпрд╛рдЪрджрд╛ рдЖрдкрдг рдПрдЦрд╛рджреНрдпрд╛ рдХрд░реНрдордЪрд╛рд▒реНрдпрд╛рд▓рд╛ рдХреЗрд╡рд│ рдПрдЦрд╛рджреНрдпрд╛ рдХрд╛рдорд╛рд╕рд╛рдареАрдЪ рдирд╡реНрд╣реЗ рддрд░ рдХрд░реНрдордЪрд╛рд▒реНрдпрд╛рд▓рд╛ рдПрдЦрд╛рджреЗ рдХрд╛рд░реНрдп рджреЗрдЦреАрд▓ рд╕реЛрдкрд╡рд╛рдпрдЪреЗ рдЕрд╕рддреЗ.

рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣реА рдХрд░реНрдордЪрд╛рд░реА рд╡рд░реНрдЧрд╛рдордзреНрдпреЗ EmployeeTask рдлреАрд▓реНрдб рдЬреЛрдбреВ рд╢рдХрддрд╛ рдЖрдгрд┐ рддреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рднрд╛рд╖реНрдп рджреЗрдК рд╢рдХрддрд╛.

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

   @OneToOne(cascade = CascadeType.ALL, mappedBy="employee")
   private EmployeeTask task;
}

рдорд╣рддреНрд╡рд╛рдЪреЗ!рдПрдореНрдкреНрд▓реЙрдпреА рдЯреЗрдмрд▓рдордзреНрдпреЗ рдЯрд╛рд╕реНрдХ_рдЖрдпрдбреА рдлреАрд▓реНрдб рдирд╕рддреЗ , рддреНрдпрд╛рдРрд╡рдЬреА рдЯрд╛рд╕реНрдХ рдЯреЗрдмрд▓рдЪреЗ рдПрдореНрдкреНрд▓реЙрдпреА_рдЖрдпрдбреА рдлреАрд▓реНрдб рдЯреЗрдмрд▓рдордзреАрд▓ рд╕рдВрдмрдВрдз рдкреНрд░рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ .

рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рджрд░рдореНрдпрд╛рди рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЕрд╕реЗ рджрд┐рд╕рддреЗ:

Employee director = session.find(Employee.class, 4);
EmployeeTask task = session.find(EmployeeTask.class, 101);
task.employee = director;
director.task = task;

session.update(task);
session.flush();

рджреБрд╡рд╛ рдХрд╛рдвреВрди рдЯрд╛рдХрдгреНрдпрд╛рд╕рд╛рдареА, рджреЛрдиреНрд╣реА рдСрдмреНрдЬреЗрдХреНрдЯрдордзреВрди рджреБрд╡реЗ рджреЗрдЦреАрд▓ рдХрд╛рдврдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:

Employee director = session.find(Employee.class, 4);
EmployeeTask task = director.task;

task.employee = null;
session.update(task);

director.task = null;
session.update(director);

session.flush();
рдЯрд┐рдкреНрдкрдгреНрдпрд╛
  • рд▓реЛрдХрдкреНрд░рд┐рдп
  • рдирд╡реАрди
  • рдЬреБрдиреЗ
рдЯрд┐рдкреНрдкрдгреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рд╕рд╛рдИрди рдЗрди рдХреЗрд▓реЗрд▓реЗ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ
рдпрд╛ рдкрд╛рдирд╛рд╡рд░ рдЕрдЬреВрди рдХреЛрдгрддреНрдпрд╛рд╣реА рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдирд╛рд╣реАрдд