我正在尝试使用SpringJPA2.0.9和Hibernate5.3.5访问FileMaker16数据库
the official JDBC driver
this dialect
为了冬眠。
public class FileMakerDialect extends Dialect {
...
private static final LimitHandler LIMIT_HANDLER = new AbstractLimitHandler() {
public String processSql(String sql, RowSelection selection) {
String soff = " offset ? rows";
String slim = " fetch first ? rows only";
StringBuilder sb = (new StringBuilder(sql.length() + soff.length() + slim.length())).append(sql);
if (LimitHelper.hasFirstRow(selection)) {
sb.append(soff);
}
if (LimitHelper.hasMaxRows(selection)) {
sb.append(slim);
}
return sb.toString();
}
public boolean supportsLimit() {
return true;
}
};
public LimitHandler getLimitHandler() {
return LIMIT_HANDLER;
}
...
}
限制处理程序只是添加
offset ? rows fetch first ? rows only
到select查询的末尾。
现在我有一个测试,在尝试从Spring JPA repo获取分页结果时失败了:
com.filemaker.jdbc文件.FMSQLException:[FileMaker][FileMaker JDBC]
com.filemaker.jdbc文件.调频_API.准备(未知来源)在
com.filemaker.jdbc文件.调频_API编制人(未知来源)在
com.filemaker.jdbc文件.调频_API编制人(未知来源)在
com.filemaker.jdbc2.commonj2语句。(未知源)位于
com.filemaker.jdbc3.CommonJ3Statement.(未知来源)位于
com.filemaker.jdbc3J3先生连接准备声明(未知来源)在
com.filemaker.jdbc2公共J2连接准备声明(未知)
(来源)
网址:com.zaxxer.hikari.pool.ProxyConnection.prepareStatement准备(ProxyConnection.java:318)
在
网址:com.zaxxer.hikari.pool.hikariproxy连接.准备陈述(H)ikariProxyConnection.java文件)
在
在
org.hibernate.engine.jdbc.internal.statementPrepareImpl文件$政治家t准备模板.prepareStatement(S)tatementPrepareImpl.java:172格式)
... 87个以上
com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:318)
select * from "MarketingCategories" marketingc0_ offset ? rows fetch first ? rows only
,将问号替换为数字并使用同一驱动程序对FileMaker数据库手动执行,它将成功返回分页结果集。
我该如何处理这个例外?我想知道如何进一步调试它。没有fmjdbc驱动程序的源代码,反编译的类也没有行号信息,所以我不能在调试器中检查它。