pagination - 用于分页的 Oracle 方言
问题描述
我们正在使用 spring data JDBC 从 oracle 中检索数据
我们正在使用org.springframework.data.relational.core.dialect.OracleDialect
从数据库中检索数据。
当我们有一个使用的存储库时,它按预期工作CrudRepository
但是,如果我们修改扩展PagingAndSortingRepository
为根据页码检索的存储库,则会出现异常。
根据分析,我们确定了由 Oracle 生成的查询LIMIT_CLAUSE
并且LOCK_CLAUSE
不遵守 Oracle。
是否有一个 Oracle 方言来生成一个适当的限制查询,它是一个实例org.springframework.data.relational.core.dialect.Dialect
?
解决方案
唯一可用的OracleDialect is based on the
AnsiDialect` 和 Oracle12c 应该支持 ANSI 标准。
进一步的调查导致怀疑 ANSI 标准允许多个变体并AnsiDialect
创建一个不适用于 Oracle12 的子句,尽管它被用于测试的 OracleXE18 接受。
Spring Data JDBC 当前创建表单的子句OFFSET %d ROWS FETCH FIRST %d ROWS ONLY
。根据https://dba.stackexchange.com/questions/30452/ansi-iso-plans-for-limit-standardization符合标准。
但是https://stackoverflow.com/a/24046664/66686暗示 Oracle12 可能需要OFFSET %d ROWS FETCH NEXT %d ROWS ONLY
作为一种解决方法,您可以按照https://spring.io/blog/2020/05/20/migrating-to-spring-data-jdbc-2-0#dialects中所述注册自定义方言
推荐阅读
- latex - Is it possible to format Chemnum to align the replacement text right?
- google-tag-manager - 在单页应用程序中动态加载 Google Tag Manager 环境
- c# - 已发布站点上的“需要 5.7.0 身份验证”,在生产中运行良好
- windows - 命令行窗口
- angular - 谷歌地图的角度地址自动填充
- c# - 使用不同的用户运行几个 C# 命令
- karate - Mouse.click() 不传递确切的 x,y 位置来单击操作
- qt - QGraphicsScene 与 QTableWidget 与单元格中的小部件:滚动不起作用
- rust - 如何在不成为 FnOnce 的情况下将共享变量从 rust Fn 中提取出来?
- azure - 使用 Azure AD B2C 通过 Microsoft 身份提供程序登录的响应无效