首页 > 解决方案 > @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();

有人可以解释一下为什么会这样吗?

谢谢...

标签: javasqlspring-bootjpa

解决方案


显然代码

@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 )

工作导致它是一个子查询,所以额外的括号也是正确的。


推荐阅读