如何通过Spring数据JPA处理分层查询(Oracle)?其中SQL包括START WITH .... CONNECT BY

时间:2018-02-06 08:48:13

标签: java spring oracle hibernate jpa

我正在尝试使用spring数据JPA来实现以下内容Link 1Link 2

我不幸地尝试了很多次,每次都失败了,所以我想让我们向朋友们提问,也许你们可以帮助我摆脱这个问题。

实际上,我每次都会收到以下错误,

org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logExceptions(SqlExceptionHelper.java:127) [jdbc.spi.SqlExceptionHelper] [main] SQL Error: 17006, SQLState: null
org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logExceptions(SqlExceptionHelper.java:129) [jdbc.spi.SqlExceptionHelper] [main] Invalid column name

我在JPA存储库中的代码是: -

String QUERY = "select * from ( select"
      + " student_id, student_activity_id, student_type_id, LEVEL,"
      + " SYS_CONNECT_BY_PATH(student_id, '/') \"Path\"" + " FROM student"
      + " where student_type_id = 1" + " START WITH student_id = ?1"
      + " connect by  NOCYCLE PRIOR student_activity_id = student_id order by level desc"
      + ") a where rownum = 1";

@Query(nativeQuery = true, value = QUERY)
Student getNextStudent(Long parentStudentId);

注意 - 上面提到的SQL查询在数据库中完美执行。

1 个答案:

答案 0 :(得分:0)

如果没有看到您的Student实体和定义的映射以及Student表的布局,这很难回答。通常,如果您在实体中映射了更多列,然后尝试在本机查询中返回,我就会看到此类问题。原因是hibernate仍会尝试映射实体中映射的其他列,但它无法在本机查询返回的结果集中找到列名。检查您的实体映射以及查询中返回的列。