In a one-to-one relationship, each row in one database table is linked to 1 and only 1 other row in another table.
For example, there is one to one relationship between employee and employee_details.
Types of One to One association
There are two types of one to one association.
a. Unidirectional one to one association
b. Bidirectional one to one association
Unidirectional one to one association
@Entity
@Table(name = "employee_details")
public class EmployeeDetails {
@Id
private int id;
private String departmentName;
.........
.........
}
@Entity
@Table(name = "employee")
public class Employee {
@Id
private int id;
private String name;
@OneToOne
@JoinColumn(name = "employee_details_id")
private EmployeeDetails employeeDetails;
..........
..........
}
Above snippet generates below DDL.
create table employee (
id integer not null,
name varchar(255),
employee_details_id integer,
primary key (id)
)
create table employee_details (
id integer not null,
departmentName varchar(255),
primary key (id)
)
alter table if exists employee
add constraint FKsg6w2kdo2j1t3wt0vxta131it
foreign key (employee_details_id)
references employee_details
In one to one association, employee is considered as client side and employee_details is considered as parent side. But a much more natural mapping would be employee from parent side and pushing the foreign key to employee_details side. This can be achieved using bidirectional one to one association.
Bidirectional one to one association
@Entity
@Table(name = "employee")
public class Employee {
@Id
private int id;
private String name;
@OneToOne(mappedBy = "emp",
cascade = CascadeType.ALL,
orphanRemoval = true,
fetch = FetchType.LAZY)
private EmployeeDetails employeeDetails;
..........
..........
}
@Entity
@Table(name = "employee_details")
public class EmployeeDetails {
@Id
private int id;
private String departmentName;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "emp_id")
private Employee emp;
..........
..........
}
Above snippet generates below DDL.
create table employee (
id integer not null,
name varchar(255),
primary key (id)
)
create table employee_details (
id integer not null,
departmentName varchar(255),
emp_id integer,
primary key (id)
)
alter table if exists employee_details
add constraint FKjwhhv402ja2w9ioxfbmbouv
foreign key (emp_id)
references employee
No comments:
Post a Comment