Spring DATA JPA多对多,代码示例
在Spring DATA JPA中,多对多关系可以通过@ManyToMany注解来实现。下面是一个示例代码:
- 创建实体类
@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
}
- 创建Repository
public interface StudentRepository extends JpaRepository<Student, Long> {
}
public interface CourseRepository extends JpaRepository<Course, Long> {
}
- 测试代码
@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的方法来查询数据,测试多对多关系是否正确。
原文地址: https://www.cveoy.top/t/topic/rZZ 著作权归作者所有。请勿转载和采集!