13 JPA一对多和多对一
1 什么是关联关系?
在现实世界中,物体与物体之间是有关联关系的,如一个收件人拥有多个收件地址,而收件人和地址两者之间就是一对多的关系,这种关系在数据库中建模时需要
把这种关系给描述出来,即,收件人表一对多关联地址表,在地址表中声明收件人表的物理外键。而把这种关系映射成java
对象,则是收件人对象下拥有一个
地址属性,其中包含地址列表。
2 一对多和多对一 的示例
用户表
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import javax.persistence.*;
import java.util.List;
import java.util.Set;
@Entity
@NoArgsConstructor
@SuperBuilder
@Getter
public class User extends BaseEntity{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
@OneToMany(mappedBy = "owner")
private List<Address> address;
}
地址表
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import javax.persistence.*;
@Entity
@NoArgsConstructor
@SuperBuilder
@Getter
public class Address extends BaseEntity{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String address;
private String phone;
private boolean isDefault;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User owner;
}