阅读此文章需要有基础的jpa知识,此处不讲述entity、repository。
可以查看我之前的文章Spring Data Jpa 快速上手(一)使用spring data jpa 实现增删改查
1.建立表、实体类
讲述一下两个实体类的关系。
Customer
为客户公司,linkMan
为客户公司的联系人,一个公司有多个联系人(员工),所以Customer
和linkMan
是一对多的关系。用到了@ManyToOne、@OneToMany、JoinColumn注解
@ManyToOne
和@OneToMany
顾名思义,是一对多和多对一,
@JoinColumn
作用:用于定义主键字段和外键字段的对应关系。有以下属性:
- name:指定外键字段的名称
- referencedColumnName:指定引用主表的主键字段名称
- unique:是否唯一。默认值不唯一
- nullable:是否允许为空。默认值允许
- insertable:是否允许插入。默认值允许
- updatable:是否允许更新。默认值允许
- columnDefinition:列的定义信息
下面是Customer
的表与实体类
@Entity
@Table(name = "cst_customer")
@Data
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "cust_id")
private Integer custId;
@Column(name = "cust_address")
private String custAddress;
@Column(name = "cust_industry")
private String custIndustry;
@Column(name = "cust_level")
private String custLevel;
@Column(name = "cust_name")
private String custName;
@Column(name = "cust_phone")
private String custPhone;
@Column(name = "cust_source")
private String custSource;
声明关系
配置外键(中间表)
// @OneToMany(targetEntity = LinkMan.class)
从表的外键名称、以及其所对应的主表的名称,若没有放弃外键维护权,则在新增用户的时候,会在lkm_cust_id修改对应的联系人信息(为联系人添加外键)
// @JoinColumn(name = "lkm_cust_id", referencedColumnName = "cust_id")
// private Set<LinkMan> linkMans = new HashSet<>();
// 声明关系,mappedBy 放弃外键维护权,mappedBy是对方配置关系的属性名称
// cascade 级联操作,允许增删改查或全部允许(ALL),加了此代码后,才可被维护
// fetch = FetchType.LAZY,设置关联对象为立即加载,默认为懒加载(要用的时候再查,推荐懒加载)
@OneToMany(mappedBy = "customer", cascade = C