我的问题的简化版本:假设有两个实体,Fish 和 Chip。
Fish 与建模为 Map 的 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 查询生成有效的 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 有问题吗?还是语法错误?
最佳答案
记录在案here , Sort
需要一个安全的表达式,因为它可能会使用未公开的属性,从而成为一个安全问题。参见 this CVE了解详情。
如果您知道自己在做什么并且没有使用潜在的恶意最终用户排序短语,则可以使用 JpaSort.unsafe(…)
。
关于Spring Data JPA PageRequest 按 Map 值属性排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45536472/