Spring Data JPA PageRequest按Map值属性排序

时间:2017-08-06 20:44:42

标签: spring hibernate jpa spring-data spring-data-jpa

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

Fish与Chip建模为一对多的关系:

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;
}

以下HQL-Query生成有效的SQL:

from Fish order by chipsMap[2].createDate

尝试使用Spring Data

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 Data JPA中的问题?或者语法错误?

1 个答案:

答案 0 :(得分:2)

正如文档here所述,Sort需要一个安全的表达,因为它可能会使用未暴露的属性,从而成为一个安全问题。有关详细信息,请参阅this CVE

如果您知道自己在做什么并且没有使用潜在的恶意最终用户排序短语,则可以使用JpaSort.unsafe(…)