有没有一种方法在 @OneToMany 关系中使用 Pageable 接口来排序实体及其嵌套集合?
我有这两个实体:
这个代码库。
这项服务
我发现有其他类似的问题,但在答案中排序变得静态,比如@OrderBy注释,但需要的是排序将是动态的,我的意思是,我必须按课程和评论中的任何属性排序。我也必须使用Pagable。
我需要像这样的东西,但我尝试过它们,只对实体Course进行排序,实体Review从未被排序。
我有这两个实体:
@Entity
@Table(name = "course")
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "course")
private List<Review> reviews = new ArrayList<>();
....contructors, getters and setters
}
@Entity
@Table(name = "review")
public class Review {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String rating;
@ManyToOne
private Course course;
....contructors, getters and setters
}
这个代码库。
@Repository
public interface CourseRepository extends JpaRepository<Course, Long> {
}
这项服务
@Service
public class CourseService {
@Autowired
CourseRepository courseRepository;
public Page<Course> getCourses(Pageable pageable) {
return courseRepository.findAll(pageable);
}
}
这个控制器
@RestController
@RequestMapping("/api")
public class CourseController {
@Autowired
CourseService courseService;
@RequestMapping(value="/courses", method= RequestMethod.GET)
public ResponseEntity<Page<CourseDTO>> readInteractionsPagedParam(Pageable pageable) {
Page<Course> pageCourse = courseService.getCourses(pageable);
... To DTO and return it
}
}
我发现有其他类似的问题,但在答案中排序变得静态,比如@OrderBy注释,但需要的是排序将是动态的,我的意思是,我必须按课程和评论中的任何属性排序。我也必须使用Pagable。
我需要像这样的东西,但我尝试过它们,只对实体Course进行排序,实体Review从未被排序。
.../api/courses?page=0&size=10&sort=name,asc&sort=reviews.rating,asc
.../api/courses?page=0&size=10&sort=name,asc&sort=reviews.rating,desc
.../api/courses?page=0&size=10&sort=name,desc&sort=reviews.rating,asc
.../api/courses?page=0&size=10&sort=name,desc&sort=reviews.rating,desc
我对Java、Spring、JPA、Hibernate等技术都比较陌生,想知道是否有实现这个目标的方法?