我正在使用Spring Data中的JpaRepository
和JpaSpecificationExecutor
,我遇到问题要对方法进行排序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的属性日期!”
我该怎么做?
答案 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。