【问题标题】:Spring Data and Native Query with Sorting带有排序的 Spring Data 和 Native Query
【发布时间】:2017-03-08 18:14:09
【问题描述】:

在一个 web 项目中,使用带有 Oracle 数据库的 spring-data(1.10.4.RELEASE),我正在尝试使用带有排序变量的本机查询。

public interface UserRepository extends JpaRepository<User, Long> {
  @Query(nativeQuery = true,value = "SELECT * FROM USERS WHERE LASTNAME = :lastname #sort")
  List<User> findByLastname(@Param("lastname") String lastname, Sort sort);
}

发起的查询是:

SELECT * FROM USERS WHERE LASTNAME = 'Lorite' #sort ORDER BY LASTNAME

就像你可以看到注释“#sort”仍然存在。

我已经尝试过Spring Data and Native Query with pagination,但注释仍然存在,并且使用另一种语法,如 ?#{#sort} 或 {#sort} 问题仍然存在。

什么都可以。

谢谢!

【问题讨论】:

  • 您在这里使用本机查询是否有原因? Spring Data JPA 可以自动为您完成所有这些工作,不需要本机查询(甚至是 JPA 查询)。
  • 我知道但是查询更复杂,这只是一个示例,唯一的方法是使用本机查询。还是谢谢。

标签: java spring spring-data


【解决方案1】:

文档说:

请注意,我们目前不支持对原生查询执行动态排序,因为我们必须操作声明的实际查询,而对于原生 SQL,我们无法可靠地执行此操作。

此外,这个#sort插值不存在

[1]http://docs.spring.io/spring-data/jpa/docs/current/reference/html/

【讨论】:

【解决方案2】:
public interface UserRepository extends JpaRepository<User, Long> {

  @Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1",
    countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1",
    nativeQuery = true)
  Page<User> findByLastname(String lastname, Pageable pageable);
}

Example 64. Declare native count queries for pagination at the query method by using @Query

Native Queries with Spring Data JPA

【讨论】:

    猜你喜欢
    • 2016-11-15
    • 2015-06-07
    • 2020-05-20
    • 2019-02-08
    • 2021-11-06
    • 2021-09-17
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    相关资源
    最近更新 更多