【发布时间】:2015-03-24 19:26:35
【问题描述】:
我们使用 spring data 在分页和可排序的表中显示计算字段列表:
@Query(value =
"select new com.mycompany.SomeDTO( " +
" c.id as creditAdviceId, " +
" case when c.associationAmount.assignedAmountNet = 0 "+
" then c.netReceivedAmount "+
" else 0 "+
" end "+
" as toAllocateAmount, " +
" c.netReceivedAmount - c.associationAmount.assignedAmountNet "+
" as notAllocatedAmount",
") " +
"from CreditAdvice c where c.debtorCompany.id = :companyId",
countQuery = "select count(c.id) from CreditAdvice c where c.debtorCompany.id = :companyId")
Page<SomeDTO> creditAdviceMonitoring(@Param("companyId") long companyId, Pageable pageable);
除了排序支持之外,一切都像这样正常工作。
要对计算字段进行排序,Spring Data(或 JPA ?)会自动附加此语句:
... order by c.toAllocateAmount desc
这是无效的,因为 CreditAdvice 实体上不存在 c.toAllocateAmount。
但是在 JPA 控制台中测试的相同请求可以正常工作(因为 select 语句中的别名):
... order by toAllocateAmount desc
问题是:有没有办法或解决方法,告诉 spring data 生成自定义 order by 子句。一些映射之王告诉他根据所需的排序字段生成的代码
【问题讨论】:
标签: sorting jpa pagination spring-data