在JPA Query中,我可以通过属性和DESC / ASC顺序将顺序作为参数传递给方法签名吗?

时间:2017-07-07 18:39:50

标签: java mysql spring spring-data-jpa jpql

我正在使用spring框架和工作存储库级别的实现。

我有一个班级:

@Repository public interface MyClassReadRepository extends ReadRepository<MyClass, Integer>

在这个课程中有一个如下所示的方法:

@Query("SELECT a FROM MyClass a WHERE a.type IN :myType ORDER BY :someProperty :someOrder") Page<MyClass> findByTypeAndOrder(@Param("myType") List<MyType> myType, @Param("someProperty")String someProperty, @Param("someOrder")String someOrder, Pageable pageable)

但显然Query结构错误:“:someProperty”应该是一个标识符......

我的问题是:如何在上面的示例中传递顺序和排序参数?

提前致谢!

3 个答案:

答案 0 :(得分:2)

使用:

PageRequest(page, size, direction, properties)

创建一个应用了排序参数的新PageRequest。 参数:

页面:从零开始的网页索引。 (如5或10等)

大小:要返回的页面大小。 (如50或100等)

方向:要指定的Sort的方向,可以为null。 (如Sort.Direction.ASC)

属性:要排序的属性,不能为null或为空。 (比如“我的专栏名称”)

答案 1 :(得分:1)

  

我的问题是:如何在上面的示例中传递顺序和排序参数?

在JPA(和JDBC)中,参数是的占位符,而不是更常用的查询文本。您不能使用它们代替列或表名称等标识符,也不能使用.toPlainString() / ASC等关键字代替。

具有相似形式但在一个或多个标识符或关键字方面不同的查询是根本不同的查询。您需要使用不同的DESC来表示它们。

答案 2 :(得分:1)

您已经传递了Pageable对象。你可以按照以下方式传递你的参数

new PageRequest(1, 10, Sort.Direction.ASC, "yourProperty");