jpa之一对一关系
单向一对一关系
单向一对一关系只需要在任意一方加入@OneToOne
,并加入@JoinColumn
,如果没有指定@JoinColumn
,t_emp表中也还是会默认生成指向t_address表的外键,如address_id
@Entity
@Table(name = "t_emp")
public class EmployeeDo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@OneToOne
@JoinColumn(name = "add_id")
private Address address;
//getter and setter
}
@Entity
@Table(name = "t_address")
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String location;
//getter and setter
}
生成表:
mysql> desc t_emp;
+--------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| add_id | int(11) | YES | MUL | NULL | |
+--------+--------------+------+-----+---------+----------------+
3 rows in set
mysql> desc t_address;
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| location | varchar(255) | YES | | NULL | |
+----------+--------------+------+-----+---------+----------------+
2 rows in set
双向一对一关系
@Entity
@Table(name = "t_emp")
public class EmployeeDo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@OneToOne
@JoinColumn(name = "add_id")
private Address address;
//getter and setter
}
@Entity
@Table(name = "t_address")
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String location;
@OneToOne(mappedBy = "address")
private EmployeeDo employeeDo;
//getter and setter
}