使用Spring Data JPA和Pageable对实体及其嵌套集合@OneToMany进行排序

3
有没有一种方法在 @OneToMany 关系中使用 Pageable 接口来排序实体及其嵌套集合?
我有这两个实体:
@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等技术都比较陌生,想知道是否有实现这个目标的方法?

1个回答

0

你应该能够在父级和嵌套属性之间添加一个点 ".",以便对其进行排序。

例如:course.something


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接