在Spring DATA JPA中,多对多关系可以通过@ManyToMany注解来实现。下面是一个示例代码:

  1. 创建实体类
@Entity
@Table(name = "student")
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(name = "student_course",
            joinColumns = @JoinColumn(name = "student_id"),
            inverseJoinColumns = @JoinColumn(name = "course_id"))
    private Set<Course> courses = new HashSet<>();

    // getters and setters
}

@Entity
@Table(name = "course")
public class Course {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @ManyToMany(mappedBy = "courses", fetch = FetchType.LAZY)
    private Set<Student> students = new HashSet<>();

    // getters and setters
}
  1. 创建Repository
public interface StudentRepository extends JpaRepository<Student, Long> {
}

public interface CourseRepository extends JpaRepository<Course, Long> {
}
  1. 测试代码
@SpringBootTest
class SpringDataJpaApplicationTests {

    @Autowired
    private StudentRepository studentRepository;

    @Autowired
    private CourseRepository courseRepository;

    @BeforeEach
    void setUp() {
        Student s1 = new Student();
        s1.setName("Tom");

        Student s2 = new Student();
        s2.setName("Jerry");

        Course c1 = new Course();
        c1.setName("Math");

        Course c2 = new Course();
        c2.setName("English");

        s1.getCourses().add(c1);
        s1.getCourses().add(c2);
        s2.getCourses().add(c2);

        studentRepository.save(s1);
        studentRepository.save(s2);
    }

    @Test
    void testFindAll() {
        List<Student> students = studentRepository.findAll();
        assertEquals(2, students.size());

        List<Course> courses = courseRepository.findAll();
        assertEquals(2, courses.size());
    }

    @Test
    void testFindByName() {
        List<Student> students = studentRepository.findByName("Tom");
        assertEquals(1, students.size());

        List<Course> courses = courseRepository.findByName("English");
        assertEquals(1, courses.size());
    }
}

在测试代码中,我们先创建了两个学生和两门课程,然后将学生和课程关联起来。接着,我们通过调用Repository的方法来查询数据,测试多对多关系是否正确。

Spring DATA JPA多对多,代码示例

原文地址: https://www.cveoy.top/t/topic/rZZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录