Spring Data 和具有分页功能的本机查询

2024-04-17

在一个网络项目中,使用最新的 spring-data (1.10.2) 和 MySQL 5.6 数据库,我尝试使用带分页的本机查询,但我遇到了org.springframework.data.jpa.repository.query.InvalidJpaQueryMethodException在启动时。

UPDATE:20180306 此问题现已修复春季2.0.4 https://jira.spring.io/browse/DATAJPA/fixforversion/16650/?selectedTab=com.atlassian.jira.plugins.jira-development-integration-plugin:release-report-tabpanel对于那些仍然感兴趣或坚持使用旧版本的人,请检查相关答案和评论以获取解决方法。

根据spring-data 文档中使用 @Query 的示例 50 http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.at-query可以指定查询本身和 countQuery,如下所示:

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);
}

出于好奇,在NativeJpaQuery我可以看到它包含以下代码来检查它是否是有效的 jpa 查询:

public NativeJpaQuery(JpaQueryMethod method, EntityManager em, String queryString, EvaluationContextProvider evaluationContextProvider, SpelExpressionParser parser) {
   super(method, em, queryString, evaluationContextProvider, parser);
   JpaParameters parameters = method.getParameters();
   boolean hasPagingOrSortingParameter = parameters.hasPageableParameter() || parameters.hasSortParameter();
   boolean containsPageableOrSortInQueryExpression = queryString.contains("#pageable") || queryString.contains("#sort");
   if(hasPagingOrSortingParameter && !containsPageableOrSortInQueryExpression) {
       throw new InvalidJpaQueryMethodException("Cannot use native queries with dynamic sorting and/or pagination in method " + method);
   }
}

我的查询包含一个Pageable参数,所以hasPagingOrSortingParameter is true,但它也在寻找#pageable or #sort内的序列queryString,我不提供。

我尝试过添加#pageable(这是一条注释)在我的查询末尾,这使得验证通过,但随后,它在执行时失败,表示查询需要一个附加参数:3 而不是 2。

有趣的是,如果我手动更改containsPageableOrSortInQueryExpression from false to true运行时,查询工作正常,所以我不知道为什么它要检查该字符串是否在我的位置queryString我不知道如何提供它。

任何帮助将非常感激。

更新 01/30/2018spring-data 项目的开发人员似乎正在努力解决这个问题延斯·肖德 (Jens Schauder) 的公关 https://github.com/spring-projects/spring-data-jpa/pull/246


我提前道歉,这几乎是对原始问题和评论的总结Janar https://stackoverflow.com/users/3752185/janar, 然而...

我遇到了同样的问题:我发现Spring Data 示例 50 http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.at-query作为我需要使用分页的本机查询的解决方案,但 Spring 在启动时抱怨我无法使用本机查询的分页。

我只是想报告我成功地运行了我需要的本机查询,使用分页,代码如下:

    @Query(value="SELECT a.* "
            + "FROM author a left outer join mappable_natural_person p on a.id = p.provenance_id "
            + "WHERE p.update_time is null OR (p.provenance_name='biblio_db' and a.update_time>p.update_time)"
            + "ORDER BY a.id \n#pageable\n", 
        /*countQuery="SELECT count(a.*) "
            + "FROM author a left outer join mappable_natural_person p on a.id = p.provenance_id "
            + "WHERE p.update_time is null OR (p.provenance_name='biblio_db' and a.update_time>p.update_time) \n#pageable\n",*/
        nativeQuery=true)
public List<Author> findAuthorsUpdatedAndNew(Pageable pageable);

需要使用 countQuery (在代码块中注释掉)Page<Author>作为查询的返回类型,需要在“#pageable”注释周围添加换行符,以避免预期参数数量出现运行时错误(解决方法的解决方法)。我希望这个错误能尽快修复...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Data 和具有分页功能的本机查询 的相关文章

随机推荐

  • 将代码从 openCV 更新到 openCV2

    我正在尝试将 python 中的一些代码从 openCV 更新为 openCV2 原代码如下 self capture cv CaptureFromCAM 0 cv SetCaptureProperty self capture cv CV
  • 按 SQL IN() 子句中值的顺序排序

    我想知道是否有 可能是更好的方法 按 IN 子句中的值的顺序进行排序 问题是我有 2 个查询 一个查询获取所有 ID 第二个查询检索所有信息 第一个创建了我希望第二个按照其排序的 ID 顺序 ID 以正确的顺序放入 IN 子句中 所以它会像
  • Excel VBA - 1004 运行时错误、应用程序或对象定义错误

    我正在尝试浏览工作表中的一系列单元格并在每个单元格中编写一个公式 但我不断收到错误 Run time error 1004 Application defined or object defined error 代码现在看起来像这样 Sub
  • 可参数化的 JSR-303 验证值

    我使用 JSR 303 bean 验证和 Spring 3 我需要根据用例为注释提供不同的值 例如 值min参数输入 Size min 对于某些验证必须为 1 对于另一种情况必须为 5 我想从属性文件中读取此值 我知道可以从中读取消息参数V
  • C 控制台底部的输入栏

    窗底 一些应用程序 如 vim mutt aptitude 包含 用于输出的顶部窗口部分和 底部供用户输入或显示状态 假设有一个子进程用于输出 另一个子进程用于接受用户输入 目的是允许在您键入输入或查看状态的同时更新输出 Actions U
  • Access 2010编译错误用户定义类型未定义

    我将 2003 年的数据库转换为 2010 年的数据库 并且 2003 年创建的 VBA 脚本在 2010 年不起作用 我收到一条消息 指出存在 编译错误 未定义用户定义的类型 我没有 VBA 脚本编写经验 也没有创建脚本 但了解它在数据库
  • Spring - 如何注入具体的接口实现?

    我需要通过 Autowired 注入服务类的具体实现 服务接口 public interface PostService 执行 Service postServiceImpl public class PostServiceImpl imp
  • Cordova Momentum 在 iOS 溢出元素上滚动

    在 Safari iOS 浏览器中侦听滚动事件每次都会触发控制台消息 即使是在动量上 但在 cordova 构建的应用程序中 只有当滚动停止时才会触发 el with webkit overflow scrolling touch on s
  • 带有反向引用的简单 java 正则表达式不起作用

    我无法用正则表达式的反向引用替换字符串 没有任何东西被替换 我总是以我的输入结束 我的代码 String input A12 3 bla bla my input input StringUtils replacePattern input
  • Bootstrap下拉菜单三角形有何奥秘?

    我试图了解 Twitter Bootstrap 下拉菜单包含在导航栏中和不包含在导航栏中时的区别 当它们包含在导航栏中时 扩展菜单上会显示一个向上的三角形 箭头 当不使用导航栏时 不会显示该三角形 http twitter github c
  • 使用 WM_COPYDATA 在进程之间发送数据

    我希望在进程之间发送文本 我发现了很多这样的例子 但没有一个我可以工作 这是我到目前为止所拥有的 对于发送部分 COPYDATASTRUCT CDS CDS dwData 1 CDS cbData 8 CDS lpData NULL Sen
  • 安装 Sqlite3 for Ruby (Mac OSX 10.5.8)

    我正在遵循本 ATM 指南 http guides rubyonrails org getting started html getting up and running quickly with scaffolding http guid
  • 使用 OCaml 收集外部命令的输出

    在 OCaml 中调用外部命令并收集其输出的正确方法是什么 在Python中 我可以做这样的事情 os popen cmd read 如何在 OCaml 中获取外部程序的所有输出 或者 更好的是 带有 Lwt 的 OCaml Thanks
  • HasThis 和 ExplicitThis 调用约定

    我遇到HasThis and ExplicitThis调用约定 NET框架参考源 https referencesource microsoft com mscorlib system reflection callingconventio
  • 当一个对象被分配给另一个对象时会发生什么

    public class DrumKitTestDrive param args public static void main String args TODO Auto generated method stub Echo e1 new
  • Java 中枚举类型的强制初始化

    我试图找到一种方法来强制 Java 加载 初始化枚举类型 嵌套在包含静态 Map 的类中 这对我来说很重要 因为枚举类型有一个填充所述映射的构造函数 并且如果没有显式方法来初始化此枚举 则映射将保持为空 我尝试过使用Class forNam
  • Tensorflow:如何查看张量板中的检查点?

    假设我有内容检查点 checkpoint model ckpt 240000 data 00000 of 00001 model ckpt 240000 index model ckpt 240000 meta 是否可以在张量板中查看检查点
  • 将 webpack(环境)变量传递给 scss 文件

    对 webpack 非常陌生 我希望能够读取一个值 在本例中具体是env from webpack config js in a sass文件 这样我就可以根据环境有不同的CSS 例如 env 开发 颜色 绿色 env 生产 颜色 蓝色 到
  • 比较没有毫秒的日期时间

    I need to compare dates in two separate list Each list is constructed of MyFile Objects That is a class that I created i
  • Spring Data 和具有分页功能的本机查询

    在一个网络项目中 使用最新的 spring data 1 10 2 和 MySQL 5 6 数据库 我尝试使用带分页的本机查询 但我遇到了org springframework data jpa repository query Inval