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

标签 java sql spring oracle hibernate

当我尝试执行在我的 JUnit 测试中使用分层子句 START WITH 和 CONNECT BY 的 native sql 查询时,我遇到了问题。

我解释了我遵循的步骤:

  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;
    

我已经使用 Sql Developer 针对我的数据库 (Oracle 10g) 对其进行了测试,一切正常。它确实有效。

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

  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();
    

但在这种情况下它不起作用...我得到 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/

相关文章:

Java:SortedMap、TreeMap、Comparable?如何使用?

Heroku/Jetty 上的 Java

sql - 为什么在配置单元中使用变量会增加 18k 映射器?

mysql - 将 SQL 转储导入 MySQL 时出错 : Unknown database/Can't create database

sql - 重新排序有序列表

java - Spring MVC 如何解析和验证处理程序方法参数?

java - 如何使用 String 中的 session 保存方法存储 hibernate 的插入查询

Java方法引用选择窄类型

java - 为什么junit测试环境无法创建bean?

java - Spring ThreadPoolExecutor Factory Bean工厂bean的使用方法