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
}
本文深入探讨了Java持久化API(JPA)中一对一关系的实现方式,包括单向和双向关系的建立,以及如何通过@OneToOne和@JoinColumn注解在实体类中映射这种关系。文中还详细介绍了在数据库层面如何生成相应的外键,帮助读者更好地理解JPA在ORM中的应用。
7万+

被折叠的 条评论
为什么被折叠?



