当我尝试执行本机sql查询时遇到问题,该查询在我的JUnit Test中使用了层次结构子句START WITH和CONNECT BY。
我解释了我所遵循的步骤:
我的原生SQL查询如下所示:
SELECT EE.* FROM SEDU_EE_ESTRUCT EE
START WITH EE.ID_EE_ESTRUCT = 2
CONNECT BY PRIOR EE.ID_EE_ESTRUCT = EE.ID_EE_ESTRUCT_PARENT;
我使用Sql Developer对我的数据库(Oracle 10g)进行了测试,一切正常。它确实有效。
当我尝试在Java方法(使用Spring,Hibernate和本机查询)中执行它时,我的问题出现了。在这种情况下,步骤是:
使用我的查询声明一个字符串:
private static final String SQL_RECURSIVE_NODES = "SELECT EE.* "
+ "FROM SEDU_EE_ESTRUCT EE "
+ "START WITH EE.ID_EE_ESTRUC = :idNode "
+ "CONNECT BY PRIOR EE.ID_EE_ESTRUCT = EE.ID_EE_ESTRUCT_PARENT";
使用该字符串创建我的SQLQuery对象:
SQLQuery myQuery = getSessionFactory().getCurrentSession().createSQLQuery(SQL_RECURSIVE_NODES);
只需执行它:
List results = myQuery.list();
但是在这种情况下它不起作用......我得到了Hibernate SQLGrammarException并且在跟踪中可以读取它:
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.sql.SQLException: Unexpected token: START in statement
出现此错误的原因是什么?
答案 0 :(得分:0)
我已经解决了。问题是我在JUnit测试中执行查询,我们没有使用Oracle DB进行测试,而是使用Hypersonic(ooucchh !!)。所以问题是START WITH和CONNECT BY只是Oracle数据库的子句。
谢谢大家。
此致