【问题标题】:@Query annotation to filter the data@Query 注解过滤数据
【发布时间】:2021-07-15 06:34:23
【问题描述】:

我在以下声明中遇到问题

`SELECT b
FROM com.development.searchbooks.dto.BooksEntity b
WHERE lower(b.title) LIKE ?1
    OR lower(b.author_name) LIKE ?1
    OR lower(b.publication) LIKE ?1
ORDER BY title ASC LIMIT 10 OFFSET ?2`

意外标记:LIMIT 附近的第 1 行第 173 列

这是我用来通过升序和分页根据关键字和顺序进行过滤的查询。我在添加 "LIMIT 10 OFFSET ?2" 这个 POC 后立即出错。

请对此提供帮助。

【问题讨论】:

  • 您是否将正确的值传递给 ?2 ?您如何调用上述 SQL 语句。你能从日志中检查它在数据库中触发的 SQL 吗?
  • 检查这是否有帮助 stackoverflow.com/a/48651391/11745755
  • 是的,初始时间的传递偏移值为10

标签: sql spring-boot spring-data-jpa


【解决方案1】:

jpa/jpql 不考虑LIMIT 关键字。 因此,为了将 LIMIT 与 @Query 一起使用,我们可以将本机查询标志设为 true。

( using - nativeQuery=true )

下面是例子

@Query("SELECT s FROM Table s ORDER BY s.id DESC LIMIT 1", nativeQuery=true)

【讨论】:

    【解决方案2】:

    我的问题的最终答案,

    @Query(value = "SELECT * FROM books WHERE lower(title) LIKE %?1% OR lower(author_name) LIKE %?1% OR lower(publication) LIKE %?1% ORDER BY title ASC LIMIT 10 OFFSET ?2", nativeQuery = true)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-04
      • 2012-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 2014-09-02
      相关资源
      最近更新 更多