sql查询在mysql中工作正常,但在spring引导测试中使用BadSqlGrammarException的HSQL失败

时间:2018-04-25 05:12:14

标签: mysql unit-testing spring-boot hsqldb

我有一个spring-boot服务,我正在编写单元测试。 该服务作为API的一部分执行以下方法。我通过Rest Client手动测试了API,我发现它可以工作。

 public int doProessing(String name) {
        String sql = "DELETE BS FROM FOO.TABLE1 BS JOIN FOO.TABLE2 BM on BM.SURR_KEY = BS.SURR_KEY WHERE BM.NAME = ?";
        return jdbcTemplate.update(sql, new Object[]{StringUtils.upperCase(name)});
    } 

当我编写使用HSQL的单元测试时,我得到以下异常。

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [DELETE BS FROM FOO.TABLE1 BS JOIN FOO.TABLE2 BM on BM.SURR_KEY = BS.SURR_KEY WHERE BM.NAME = ?]; nested exception is java.sql.SQLSyntaxErrorException: unexpected token: BS required: FROM in statement [DELETE BS FROM FOO.TABLE1 BS JOIN FOO.TABLE2 BM on BM.SURR_KEY = BS.SURR_KEY WHERE BM.NAME = ?]

我不明白为什么HSQL抱怨这个在MySQL中工作正常的sql。

由于

1 个答案:

答案 0 :(得分:0)

这不受支持,因为它使用JOIN进行DELETE。 HSQLDB语法如下:

DELETE FROM FOO.TABLE1 BS WHERE BS.SURR_KEY IN (SELECT BM.SURR_KEY FROM FOO.TABLE2 BM WHERE BM.NAME = ?)