使用 JPA 本机查询的 Oracle 分层查询(START WITH、CONNECT BY PRIOR):ORA-00933 SQL 命令未正确结束
Spring boot - Oracle 19 - JPA
我定义了一个简单的分层表,具有父/子关系。
我有以下查询:
SELECT
tnv.*
FROM
TBL_NOM_VERSION tnv
WHERE
tnv.INSTITUTION_ID = ?1 START WITH tnv.PARENT_ID IS NULL CONNECT
BY
PRIOR tnv.ID = tnv.PARENT_ID
ORDER SIBLINGS BY
tnv.TREE_LEVEL ASC
注意:查询在 DBeaver 中正常工作,到目前为止有任何问题!
当我尝试在 Spring Boot 应用程序中执行查询时,出现以下错误:
@Query(nativeQuery = true, value = "SELECT * \n" +
"FROM TBL_NOM_VERSION tnv \n" +
"WHERE tnv.INSTITUTION_ID = ?1\n" +
"START WITH tnv.PARENT_ID IS NULL\n" +
"CONNECT BY PRIOR tnv.ID = tnv.PARENT_ID \n" +
"ORDER SIBLINGS BY tnv.TREE_LEVEL ASC;")
List<NomVersionView> findAllNomenclatureByInstitution(Long institutionId);
休眠: 选择 * 从 TBL_NOM_VERSION tnv 在哪里 tnv.INSTITUTION_ID = ?从 tnv.PARENT_ID 为 NULL 开始连接 经过 先前的 tnv.ID = tnv.PARENT_ID 兄弟姐妹排序依据 tnv.TREE_LEVEL ASC; org.springframework.dao.InvalidDataAccessResourceUsageException:无法提取结果集; SQL [不适用];嵌套异常是org.hibernate.exception.SQLGrammarException:无法提取ResultSet 在 org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:281) 在 org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:255) 引起原因:java.sql.SQLSyntaxErrorException:ORA-00933:SQL命令未正确结束
application.yml:
spring:
datasource:
driver-class-name: oracle.jdbc.OracleDriver
jpa:
database-platform: org.hibernate.dialect.Oracle12cDialect
pom.xml
<dependency>
<groupId>com.oracle.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>18.3.0.0</version>
</dependency>
可能是什么原因?是否可以使用Spring Boot Data执行sql原生分层查询? 我做错了什么?
谢谢!
Spring boot - Oracle 19 - JPA
I've defined a simple hierarchical table, with a parent/child relationship.
I have the following query:
SELECT
tnv.*
FROM
TBL_NOM_VERSION tnv
WHERE
tnv.INSTITUTION_ID = ?1 START WITH tnv.PARENT_ID IS NULL CONNECT
BY
PRIOR tnv.ID = tnv.PARENT_ID
ORDER SIBLINGS BY
tnv.TREE_LEVEL ASC
NOTE: The query works properly in DBeaver, any problem so far!
When I try to execute the query in my spring boot application, I got the following error:
@Query(nativeQuery = true, value = "SELECT * \n" +
"FROM TBL_NOM_VERSION tnv \n" +
"WHERE tnv.INSTITUTION_ID = ?1\n" +
"START WITH tnv.PARENT_ID IS NULL\n" +
"CONNECT BY PRIOR tnv.ID = tnv.PARENT_ID \n" +
"ORDER SIBLINGS BY tnv.TREE_LEVEL ASC;")
List<NomVersionView> findAllNomenclatureByInstitution(Long institutionId);
Hibernate:
SELECT
*
FROM
TBL_NOM_VERSION tnv
WHERE
tnv.INSTITUTION_ID = ? START WITH tnv.PARENT_ID IS NULL CONNECT
BY
PRIOR tnv.ID = tnv.PARENT_ID
ORDER SIBLINGS BY
tnv.TREE_LEVEL ASC;
org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:281)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:255)
Caused by: java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended
application.yml:
spring:
datasource:
driver-class-name: oracle.jdbc.OracleDriver
jpa:
database-platform: org.hibernate.dialect.Oracle12cDialect
pom.xml
<dependency>
<groupId>com.oracle.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>18.3.0.0</version>
</dependency>
What could be the cause? Is it possible to perform sql native hierarchical query using Spring Boot Data?
What am I doing wrong?
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论