我有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样式语法的支持?
如果将Hibernate 3.6与HSQLDB 2.0.1或更高版本一起使用,则可以sql.syntax_ora=true在连接URL上使用连接属性。这将启用DUAL表以及一些其他Oracle特定语法。
sql.syntax_ora=true
对于主属性未涵盖的行为,您可能需要更多的连接属性。请参阅:http : //hsqldb.org/doc/2.0/guide/management- chapt.html#mtc_compatibility_oracle