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();