5.1 āĻāĻ āĻĨā§āĻā§ āĻāĻ āĻ¯ā§āĻāĻžāĻ¯ā§āĻā§āĻ° āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻĢāĻ°ā§āĻŽ
āĻĻā§āĻāĻŋ āĻ¸āĻ¤ā§āĻ¤āĻž āĻļā§āĻ°ā§āĻŖā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§āĻ° āĻāĻ°ā§āĻāĻāĻŋ āĻāĻāĻ°ā§āĻˇāĻŖā§āĻ¯āĻŧ āĻāĻŦāĻ āĻŦāĻ°āĻ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻ°āĻ¯āĻŧā§āĻā§ - āĻāĻāĻāĻŋ āĻāĻ-āĻāĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻāĨ¤
āĻāĻŽāĻŋ āĻāĻ āĻā§āĻ¸āĻāĻŋāĻā§ āĻā§āĻŦ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻŦāĻ˛āĻŋ, āĻāĻžāĻ°āĻŖ āĻāĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§āĻ° āĻā§āĻ¯āĻŧā§ āĻāĻžāĻāĻž āĻ āĻŦāĻā§āĻā§āĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻŦā§āĻļāĻŋāĨ¤ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§, āĻā§āĻŦāĻŋāĻ˛ā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĻā§āĻāĻŋ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻ°āĻ¯āĻŧā§āĻā§:
- āĻā§āĻŦāĻŋāĻ˛ā§āĻ° āĻ¸āĻžāĻ°āĻŋāĻ¤ā§ āĻ āĻ¨ā§āĻ¯ āĻā§āĻŦāĻŋāĻ˛ā§āĻ° āĻāĻāĻĄāĻŋāĻ° āĻāĻāĻāĻŋ āĻ˛āĻŋāĻā§āĻ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤
- āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻā§āĻŦāĻŋāĻ˛āĻāĻŋ āĻŦāĻšā§-āĻĨā§āĻā§-āĻ āĻ¨ā§āĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻšāĻ¯āĻŧāĨ¤
āĻāĻ¨ā§āĻāĻŋāĻāĻŋ āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻāĻŽāĻ¨ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻĨāĻžāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¯āĻž āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻā§āĻāĻž āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§:
- @āĻāĻŽā§āĻŦā§āĻĄā§āĻĄ
- āĻāĻāĻ¤āĻ°āĻĢāĻž 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;
}
āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ āĻ āĻŋāĻāĻžāĻ¨āĻžāĻāĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻā§āĻˇā§āĻ¤ā§āĻ° āĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ User āĻā§āĻ˛āĻžāĻ¸ā§ :
@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 āĻā§āĻˇā§āĻ¤ā§āĻ°āĻāĻŋ Employee āĻā§āĻ˛āĻžāĻ¸ā§ āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻāĻāĻŋāĻā§ āĻ¸āĻ āĻŋāĻ āĻā§āĻāĻž āĻĻāĻŋāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
@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();