Skip to main content

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;
}