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