Spring数据JPA PageRequest按映射值排序属性
我的问题的简化版本:假设有两个实体,鱼和芯片 Fish与模拟为地图的芯片有一对多关系:Spring数据JPA PageRequest按映射值排序属性,spring,hibernate,jpa,spring-data,spring-data-jpa,Spring,Hibernate,Jpa,Spring Data,Spring Data Jpa,我的问题的简化版本:假设有两个实体,鱼和芯片 Fish与模拟为地图的芯片有一对多关系: public class Fish { @OneToMany @JoinTable(name = "the_map", joinColumns = @JoinColumn(name = "fish_id"), inverseJoinColumns = @JoinColumn(name = "chip_id") ) @MapKey
public class Fish {
@OneToMany
@JoinTable(name = "the_map",
joinColumns = @JoinColumn(name = "fish_id"),
inverseJoinColumns = @JoinColumn(name = "chip_id")
)
@MapKeyColumn(name = "the_key")
private Map<Integer, Chip> chipsMap;
}
用Spring数据尝试同样的方法
PageRequest pr = new PageRequest(0, 10,
Sort.Direction.ASC.fromString("chipsMap[2].createDate"));
fishRepository.findAll(pr);
投掷
org.springframework.data.mapping.PropertyReferenceException:
No property chipsMap[2] found for type Fish!
Spring数据JPA中的问题?还是语法错误?如文件所述,排序
需要一个安全的表达式,因为它可能使用未公开的属性,从而成为一个安全问题。有关详细信息,请参阅
如果您知道自己在做什么,并且没有使用潜在的恶意最终用户排序短语,您可以使用
JpaSort.unsafe(…)
Hm,我已经尝试了PageRequest pr=new PageRequest(0,10,JpaSort.unsafe(sort.Direction.ASC,“chipsMap[2].createDate”)
和PageRequest pr=新的PageRequest(0,10,JpaSort.unsafe(“chipsMap[2].createDate”)
-但两者都会引发相同的异常(没有为Fish类型找到属性chipsMap[2])。此外,chipsMap[2]。createDate
是一个“可引用的路径表达式”,因此我认为它不应该是“不安全的”。
org.springframework.data.mapping.PropertyReferenceException:
No property chipsMap[2] found for type Fish!