我在测试中使用了h2 db。下面是我的测试h2 db设置:
private static final String JDBC_URL = "jdbc:h2:mem:test;MODE=PostgreSQL;DB_CLOSE_DELAY=-1";
Connection connection = DriverManager.getConnection(JDBC_URL);
字符串
我试过2.2.220和2.1.214 H2版本。SQL查询是下一个:
var query = SELECT json_build_object('product', c."info"->'product') as info FROM item."Item" AS c
INNER JOIN (SELECT "rootId", MAX("revisionNo") AS maxRevisionNo FROM item."Item" WHERE "cRootId" = ?
GROUP BY "rootId" ) AS subquery ON c."rootId" = subquery."rootId" AND c."revisionNo" = subquery.maxRevisionNo WHERE c."state" = 'active'
型
我正试图用它创建一个准备好的声明:
var statement = connection.prepareStatement(query);
型
获取错误:
org.h2.jdbc.JdbcSQLSyntaxErrorException:函数“JSON_BUILD_OBJECT”未找到
在真实的的Postgres数据库中一切正常,但在Postgres模式下使用h2进行测试时失败。我能修复它吗?如何修复?非常感谢您的关注和参与。
1条答案
按热度按时间z9smfwbn1#
H2没有
JSON_BUILD_OBJECT
内置函数。这似乎是一个PostgreSQL函数。使用相同的数据库进行测试和生产,或者将查询更改为使用H2JSON_OBJECT
函数(http://www.h2database.com/html/functions.html#json_object)。我推荐前者,这样您的测试就可以与应用程序稍后将要使用的测试相匹配。