Hibernate + Spring with Oracle - 使用分层查询(START WITH + CONNECT BY)

时间:2014-05-14 18:24:23

标签: java sql spring oracle hibernate

当我尝试执行本机sql查询时遇到问题,该查询在我的JUnit Test中使用了层次结构子句START WITH和CONNECT BY。

我解释了我所遵循的步骤:

  1. 我的原生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;
    
  2. 我使用Sql Developer对我的数据库(Oracle 10g)进行了测试,一切正常。它确实有效。

    当我尝试在Java方法(使用Spring,Hibernate和本机查询)中执行它时,我的问题出现了。在这种情况下,步骤是:

    1. 使用我的查询声明一个字符串:

      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";
      
    2. 使用该字符串创建我的SQLQuery对象:

      SQLQuery myQuery = getSessionFactory().getCurrentSession().createSQLQuery(SQL_RECURSIVE_NODES);
      
    3. 只需执行它:

      List results = myQuery.list();
      
    4. 但是在这种情况下它不起作用......我得到了Hibernate SQLGrammarException并且在跟踪中可以读取它:

      org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
      Caused by: java.sql.SQLException: Unexpected token: START in statement
      

      出现此错误的原因是什么?

1 个答案:

答案 0 :(得分:0)

我已经解决了。问题是我在JUnit测试中执行查询,我们没有使用Oracle DB进行测试,而是使用Hypersonic(ooucchh !!)。所以问题是START WITH和CONNECT BY只是Oracle数据库的子句。

谢谢大家。

此致