我在Spring Data中遇到了NullHandling的问题。我正在尝试将自定义的NullHandling传递给我的repository的findAll方法 - 像下面这样:
Page<Developer> developerPage = developerRepository.findAll(
new PageRequest(0, 2, new Sort(new Sort.Order(Sort.Direction.ASC, "user").nullsFirst()))
);
然而,我已经将选项show-sql设置为true,在日志中看到传递给数据库的查询中没有提及空值处理。我得到了错误的结果(即使对于Postgres和H2也有更多不同的结果,但我理解这是每个数据库默认空值处理之间的差异)。Postgres的配置如下:
spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost/postgres?useUnicode=yes&characterEncoding=UTF-8
spring.datasource.username=postgres
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.properties.hibernate.globally_quoted_identifiers=true
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
这里的问题是什么?Spring Data JPA支持自定义null处理吗?
编辑:
我发现JPA的查询顺序部分在QueryUtils类的toOrders(..)方法中创建。有趣的是,Spring Data的Sort实现被映射到JPA的Sort实现,但在那里不支持null处理。还有一个JIRA问题描述了该问题,但它来自2014年: https://jira.spring.io/browse/DATACMNS-491