返回

Spring Data JPA实体关系映射

后端

一对一关系映射

一对一关系映射表示一对一的关系,即一个实体可以与另一个实体相关联,而另一个实体只能与该实体相关联。在Spring Data JPA中,我们可以使用@OneToOne注释来定义一对一关系。

@Entity
public class Person {

    @Id
    @GeneratedValue
    private Long id;

    private String name;

    @OneToOne(mappedBy = "person")
    private Address address;

}

@Entity
public class Address {

    @Id
    @GeneratedValue
    private Long id;

    private String street;
    private String city;
    private String state;
    private String zipCode;

    @OneToOne
    private Person person;

}

在上面的示例中,PersonAddress实体类之间存在一对一的关系。Person实体类中的address属性被注释为@OneToOne(mappedBy = "person"),这表示Person实体类中的address属性与Address实体类中的person属性相关联。Address实体类中的person属性被注释为@OneToOne,这表示Address实体类中的person属性与Person实体类中的address属性相关联。

一对多关系映射

一对多关系映射表示一对多的关系,即一个实体可以与多个实体相关联,而多个实体只能与一个实体相关联。在Spring Data JPA中,我们可以使用@OneToMany注释来定义一对多关系。

@Entity
public class Department {

    @Id
    @GeneratedValue
    private Long id;

    private String name;

    @OneToMany(mappedBy = "department")
    private List<Employee> employees;

}

@Entity
public class Employee {

    @Id
    @GeneratedValue
    private Long id;

    private String name;

    @ManyToOne
    private Department department;

}

在上面的示例中,DepartmentEmployee实体类之间存在一对多关系。Department实体类中的employees属性被注释为@OneToMany(mappedBy = "department"),这表示Department实体类中的employees属性与Employee实体类中的department属性相关联。Employee实体类中的department属性被注释为@ManyToOne,这表示Employee实体类中的department属性与Department实体类中的employees属性相关联。

多对多关系映射

多对多关系映射表示多对多的关系,即一个实体可以与多个实体相关联,而多个实体也可以与多个实体相关联。在Spring Data JPA中,我们可以使用@ManyToMany注释来定义多对多关系。

@Entity
public class Course {

    @Id
    @GeneratedValue
    private Long id;

    private String name;

    @ManyToMany
    private List<Student> students;

}

@Entity
public class Student {

    @Id
    @GeneratedValue
    private Long id;

    private String name;

    @ManyToMany(mappedBy = "students")
    private List<Course> courses;

}

在上面的示例中,CourseStudent实体类之间存在多对多的关系。Course实体类中的students属性被注释为@ManyToMany,这表示Course实体类中的students属性与Student实体类中的courses属性相关联。Student实体类中的courses属性被注释为@ManyToMany(mappedBy = "students"),这表示Student实体类中的courses属性与Course实体类中的students属性相关联。