2017-10-21 69 views
-1

我可以在结束表达式时给出排序参数吗?因为我需要在over()函数内使用sort参数。弹簧数据使用排序不在末尾

例如:

@Query(value = "...?2...over(?4)...?1...?3") 
myMethod(int a,int b,int c,Sort sort); 

或表达式排序里面了: - #排序\ n#{#排序} ..

我仍然得到:

的java .lang.IllegalArgumentException:验证方法的查询失败public abstract java.lang.Integer ...方法的名称..(int,int,int,org.springframework.data.domain.Sort)!

+1

做了更多信息,你读了[DOC](https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa。查询methods.sorting)?你能发布[mcve]并完成堆栈跟踪吗? – 2017-10-21 08:04:29

回答

0

Sort类型的参数得到Spring Data JPA的特殊处理。

即使不是这样,您尝试实现的情况不能用简单的绑定参数完成,因为这些位置允许通过SQL绑定参数。

取决于你想要达到你也许可以做类似下面的内容:

@Query("select .... over(... order by CASE ?1 WHEN "first THEN first 
    WHEN 'last' THEN last 
    END") 
public Something method(String columnNameForSorting) 

假设你有你想要的排序之间进行切换列firstlast

Standard SQL alternative to Oracle DECODE有关CASE表达式

+0

对于直接将完成字符串转换为like(按?4顺序)转换为sql,sql返回的结果不好。但如果我按照这种方式尝试,就像你写的那样,这很好。谢谢! – Victorio

+0

如果这解决了问题,请接受它(单击对号)并加注。特别是复选标记可以让其他人发现解决问题的问题。 –