Spring数据:按嵌套属性排序

时间:2015-04-17 13:58:09

标签: java spring spring-data

我正在使用Spring Data中的JpaRepositoryJpaSpecificationExecutor,我遇到问题要对方法进行排序findAll(specification, pageable, sort)

我想通过主repo类的嵌套属性对规范的结果进行排序。这是我的情况:

主要班级

class Foo {
    //other properties
    @OneToMany(mappedBy="foo")
    private Set<Bar> bars;
}

订购类

class Bar {
    @ManyToOne
    @JoinColumn(name="fooId")
    private Foo foo;

    //I WANT TO SORT BY THIS FIELD
    @Column
    private Date date;
}

这是我的回购

interface FooRepo extends JpaRepository<Foo , Long>, 
        JpaSpecificationExecutor<Foo>{
    //just jparepo methods
}

这就是我正在尝试订购这个结果

void anymethod(){
    Sort sort = new Sort(Bar_.date.getName());
    PageRequest pr = new PageRequest(anyPage, anyMaxResultsNum, sort);
    repository.findAll(anySpecification, pr);

}

当我运行这个时,我得到“PropertyReferenceException:找不到类型Foo的属性日期!”

我该怎么做?

2 个答案:

答案 0 :(得分:5)

您可以使用@javax.persistence.OrderBy注释:

@OneToMany(mappedBy="foo")
@OrderBy("date")
private Set<Bar> bars;

答案 1 :(得分:0)

date字段定义在Bar,而不是Foo。因此,使用日期排序定义BarRepo并在findAll()上调用BarRepo。由于您有双向关联,因此您可以从Foo返回的每个Bar获取findAll(),并过滤掉任何重复的Foo

您可以尝试在@Query界面方法上使用FooRepo注释来定义native sql to execute