在 JPA 查询中,是否可以将属性顺序和 DESC/ASC 顺序作为方法签名中的参数传递?



我正在使用 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)

但显然查询结构是错误的:":someProperty"应该是一个标识符......

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

提前感谢!

使用:

PageRequest(page, size, direction, properties)

创建应用了排序参数的新页面请求。 参数:

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

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

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

属性:要作为排序依据的属性不得为 null 或空。(如"我的列名称"(

您已经在传递一个可分页的对象。您可以按如下方式传递参数

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

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

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

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

最新更新