Spring数据JPA PageRequest按映射值排序属性

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

我的问题的简化版本:假设有两个实体,鱼和芯片

Fish与模拟为地图的芯片有一对多关系:

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!