一尘不染

JUnit / HSQLDB:使用HSQLDB测试时如何解决Oracle语法错误(无特权和/或无DUAL对象)

hibernate

我有DAO代码,其中包含一些具有Oracle特定语法的JDBC,例如:

select count(*) cnt from DUAL 
where exists (select null from " + TABLE_NAME + "
              where LOCATION = '" + location + "')")

我正在使用内存中的HSQLDB数据库在此DAO方法上运行JUnit测试。显然DUAL表是Oracle特定的,并且在运行测试时导致错误:

org.springframework.jdbc.BadSqlGrammarException: StatementCallback; 
    bad SQL grammar [select count(*) cnt from DUAL where exists 
                    (select null from ESRL_OBSERVATIONS where LOCATION = '/path1')];
nested exception is java.sql.SQLException: user lacks privilege or object 
    not found: DUAL

有人可以建议我做些什么来解决这个问题吗?我正在使用Hibernate创建架构-
也许我可以在Hibernate属性中进行设置以启用对Oracle样式语法的支持?


阅读 260

收藏
2020-06-20

共1个答案

一尘不染

如果将Hibernate 3.6与HSQLDB
2.0.1或更高版本一起使用,则可以sql.syntax_ora=true在连接URL上使用连接属性。这将启用DUAL表以及一些其他Oracle特定语法。

对于主属性未涵盖的行为,您可能需要更多的连接属性。请参阅:http : //hsqldb.org/doc/2.0/guide/management-
chapt.html#mtc_compatibility_oracle

2020-06-20