java - @query Java JPA 中缺少双亲
问题描述
我正在@repository 类中进行查询
这是下一个:
@Query(value="(SELECT * FROM cor_documento WHERE ENVIADA_RECIBIDA = 'R' AND NVL(CANAL, ' ') != 'SDQS' AND fecha_Rad > :fechaRad order by fecha_Ra desc) " ,nativeQuery=true )
public Iterable<CorDocumento> findByFechaRadicacion(Date fechaRadicacion);
我得到下一个错误:
2021-09-21 16:28:15.326 DEBUG 28164 --- [ scheduling-1] org.hibernate.SQL : (SELECT * FROM cor_documento WHERE ENVIADA_RECIBIDA = 'R' AND NVL(CANAL, ' ') != 'SDQS' AND fecha_Radicacion > ? order by fecha_Radicacion desc)
Hibernate: (SELECT * FROM cor_documento WHERE ENVIADA_RECIBIDA = 'R' AND NVL(CANAL, ' ') != 'SDQS' AND fecha_Radicacion > ? order by fecha_Radicacion desc)
2021-09-21 16:28:15.361 WARN 28164 --- [ scheduling-1] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 907, SQLState: 42000
2021-09-21 16:28:15.361 ERROR 28164 --- [ scheduling-1] o.h.engine.jdbc.spi.SqlExceptionHelper : ORA-00907: falta el paréntesis derecho (the right parenthesis is missing)
2021-09-21 16:28:15.363 ERROR 28164 --- [ scheduling-1] o.s.s.s.TaskUtils$LoggingErrorHandler : Unexpected error occurred in scheduled task
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:259) ~[spring-orm-5.3.8.jar:5.3.8]
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:233) ~[spring-orm-5.3.8.jar:5.3.8]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:551) ~[spring-orm-5.3.8.jar:5.3.8]
当我在“SELECT”之前和“desc”之后删除双亲时,它可以工作:
@Query(value="SELECT * FROM cor_documento WHERE ENVIADA_RECIBIDA = 'R' AND NVL(CANAL, ' ') != 'SDQS' AND fecha_Rad > :fechaRad order by fecha_Rad desc" ,nativeQuery=true )
但是我看不到错误的意义,因为我还有其他@Query带有括号并且可以正常工作:
@Query(value="(SELECT * FROM (SELECT * FROM cor_documento WHERE to_char(fecha_Rad, 'dd-mm-yyyy') = to_char(sysdate, 'dd-mm-yyyy') AND ENVIADA_RECIBIDA = 'R' AND NVL(CANAL, ' ') != 'SDQS' order by fecha_Rad desc ) WHERE rownum <= 15)" ,nativeQuery=true )
public Iterable<CorDocumento> findLast15();
有人可以解释一下为什么会这样吗?
谢谢...
解决方案
显然代码
@Query(value="(SELECT * FROM (SELECT * FROM cor_documento WHERE to_char(fecha_Rad, 'dd-mm-yyyy') = to_char(sysdate, 'dd-mm-yyyy') AND ENVIADA_RECIBIDA = 'R' AND NVL(CANAL, ' ') != 'SDQS' order by fecha_Rad desc ) WHERE rownum <= 15)" ,nativeQuery=true )
工作导致它是一个子查询,所以额外的括号也是正确的。
推荐阅读
- google-cloud-platform - Vision API 的话题性和分数始终相同
- vue.js - Nuxt 在生成脚本期间挂起
- c++ - 用于解耦 API 使用的回调
- python - Python, cx_Freeze "python setup.py build" 没有做任何事情
- html - 根据屏幕大小添加/隐藏标签
- powershell - 如何使用 powershell 在 Windows Server 2008 R2 上安装的辅助 ADFS 2.0 上更新 ADFS SSL 证书
- aws-lambda - optaplanner 与 aws lambda
- javascript - 如何防止浏览器在渲染时滚动到顶部
- javascript - 在接受用户协议之前暂停表单提交
- javascript - 在 if 语句中使用 array.includes 时出现函数预期错误