Spring Data Jpa 基于注解的级联查询

公司最近还是在使用spring data jpa,自己练习时遇到一些坑,记录一下

首先描述一些业务逻辑:

一共有两张表,一张学生表,一张公司表,学生与公司属于一对多的关系,即一个学生只能属于一个公司,但是一个公司可以拥有多名学生

学生实体类:

package com.sj.Entity;
 
import org.hibernate.annotations.GenericGenerator;
 
import javax.persistence.*;
import java.io.Serializable;
import java.util.Objects;
 
@Entity
@Table(name = "student", schema = "public", catalog = "taihua")
public class StudentEntity implements Serializable {
    private String id;
    private String name;
    private String sex;
    private String remark;
 
    private CompanyEntity company;
 
    @Id
    @Column(name = "id")
    @GeneratedValue(generator = "uuid")
    @GenericGenerator(name = "uuid", strategy = "uuid")
    public String getId() {
        return id;
    }
 
    public void setId(String id) {
        this.id = id;
    }
 
    @Basic
    @Column(name = "name")
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    @Basic
    @Column(name = "sex")
    public String getSex() {
        return sex;
    }
 
    public void setSex(String sex) {
        this.sex = sex;
    }
 
    @Basic
    @Column(name = "remark")
    public String getRemark() {
        return remark;
    }
 
    public void setRemark(String remark) {
        this.remark = remark;
    }
    @ManyToOne
    @JoinColumn(name="company_id")
    public CompanyEntity getCompany() {
        return company;
    }
 
    public void setCompany(CompanyEntity company) {
        this.company = company;
    }
 
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        StudentEntity that = (StudentEntity) o;
        return Objects.equals(id, that.id) &&
                Objects.equals(name, that.name) &&
                Objects.equals(sex, that.sex) &&
                Objects.equals(remark, that.remark);
    }
 
    @Override
    public int hashCode() {
        return Objects.hash(id, name, sex, remark);
    }
 
    @Override
    public String toString() {
        return "学生{" +
                "学号='" + id + '\'' +
                ", 姓名='" + name + '\'' +
                ", 性别='" + sex + '\'' +
                ", 备注='" + remark + '\'' +
                ", 单位=" + company +
                '}';
    }
}
公司实体类:

package com.sj.Entity;
 
import javax.persistence.*;
import java.util.Objects;
 
@Entity
@Table(name = "company", schema = "public", catalog = "taihua")
public class CompanyEntity {
    private String companyId;
    private String companyName;
 
    @Id
    @Column(name = "company_id")
    public String getCompanyId() {
        return companyId;
    }
 
    public void setCompanyId(String companyId) {
        this.companyId = companyId;
    }
 
    @Basic
    @Column(name = "company_name")
    public String getCompanyName() {
        return companyName;
    }
 
    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }
 
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        CompanyEntity that = (CompanyEntity) o;
        return Objects.equals(companyId, that.companyId) &&
                Objects.equals(companyName, that.companyName);
    }
 
    @Override
    public int hashCode() {
        return Objects.hash(companyId, companyName);
    }
 
    @Override
    public String toString() {
        return "公司:{" +
                "公司编号='" + companyId + '\'' +
                ", 公司名称='" + companyName + '\'' +
                '}';
    }
}
repository层代码:

package com.sj.Repository;
 
import com.sj.Entity.StudentEntity;
import org.springframework.data.jpa.repository.JpaRepository;
 
public interface IStudentRepository extends JpaRepository<StudentEntity,String> {
    //StudentEntity findByName(String name);
    //StudentEntity readByName(String name);
/***
*级联查询的方法
***/
    StudentEntity getByCompanyCompanyId(String companyId);
}
业务需求,根据公司编号查询学生信息

其实没什么技术难点,唯一需要注意的就是JPA方法的命名:

在JPA的级联查询中,find/get/rebdBy后跟的是本身的属性名,之后是关联实体类的属性名,

比如,根据公司编号查询学生信息

getByCompanyCompanyID

getBy:jpa方法命名规范

company:学生实体类的company属性

companyId :公司实体类的companyId属性
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值