当我尝试执行在我的 JUnit 测试中使用分层子句 START WITH 和 CONNECT BY 的 native sql 查询时,我遇到了问题。
我解释了我遵循的步骤:
我的原生 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 和 native 查询)中执行它时,我的问题就来了。在这种情况下,步骤是:
用我的查询声明一个字符串:
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
这个错误的原因可能是什么?
最佳答案
我已经解决了。问题是我在 JUnit 测试中执行查询,我们没有使用 Oracle DB 进行测试,而是使用 Hypersonic(ooucchh!!)。所以问题是 START WITH 和 CONNECT BY 只是 Oracle 数据库的子句。
谢谢大家。
问候
关于java - Hibernate + Spring with Oracle - 使用分层查询(START WITH + CONNECT BY),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23662285/