Oracle ORA-00942:Spring引导中不存在带有Spring JDBC模板的表或视图

Oracle ORA-00942:Spring引导中不存在带有Spring JDBC模板的表或视图,oracle,jdbc,spring-data,spring-jdbc,ojdbc,Oracle,Jdbc,Spring Data,Spring Jdbc,Ojdbc,我在尝试通过Spring JDBC模板执行数据库代码时遇到一个奇怪的ORA-00942:表或视图不存在异常: 2019-12-26 22:01:36.863[0;39m [31mERROR[0;39m [35m12232[0;39m [2m---[0;39m [2m[ctor-http-nio-3][0;39m [36ma.w.r.e.AbstractErrorWebExceptionHandler[0;39m [2m:[0;39m [ca8305eb] 500 Server Error for

我在尝试通过Spring JDBC模板执行数据库代码时遇到一个奇怪的
ORA-00942:表或视图不存在
异常:

2019-12-26 22:01:36.863[0;39m [31mERROR[0;39m [35m12232[0;39m [2m---[0;39m [2m[ctor-http-nio-3][0;39m [36ma.w.r.e.AbstractErrorWebExceptionHandler[0;39m [2m:[0;39m [ca8305eb] 500 Server Error for HTTP GET "/exs/acs/accounts-links?limit=20&q=632626&showActive=false&systemName=IMMS"

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [select a.FACCIN, a.FACCKEY, a.FACCSNAME, b.LNKSYSTEM, b.LNKLOANKEY, a.FACCSTATUS, a.FACCCOND from BNYMACS.ACCOUNT a left outer join BNYMACS.LINKS b on a.FACCIN = b.lnkacc where (upper(a.FACCKEY) like ? or upper(FACCSNAME) like ? or (b.LNKLOANKEY like ? )) and b.LNKSYSTEM =?  and rownum<=? order by 3 ]; nested exception is java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist

    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:235) ~[spring-jdbc-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
    |_ checkpoint ? org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? HTTP GET "/exs/acs/accounts-links?limit=20&q=632626&showActive=false&systemName=IMMS" [ExceptionHandlingWebHandler]
Stack trace:
        at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:235) ~[spring-jdbc-5.2.0.RELEASE.jar:5.2.0.RELEASE]
由于使用了Oracle驱动程序,我无法真正调试Oracle.jdbc.driver.OraclePreparedStatementWrapper中发生的事情,因为开发者关闭了源代码

奇怪的是,来自Spring JDBC模板的查询进入Oracle驱动程序,当在调试会话期间使用其参数提取并复制到外部SQL客户机中时,该查询就可以正常工作了:

select a.FACCIN, a.FACCKEY, a.FACCSNAME, b.LNKSYSTEM, b.LNKLOANKEY, a.FACCSTATUS, a.FACCCOND from BNYMACS.ACCOUNT a left outer join BNYMACS.LINKS b on a.FACCIN = b.lnkacc where (upper(a.FACCKEY) like '632626%' or upper(FACCSNAME) like '632626%' or (b.LNKLOANKEY like '632626%' )) and b.LNKSYSTEM ='IMMS'  and rownum<=20 order by 3 ;
该表似乎是一个同义词:

运行时用户是webvc\u-READ

直接查询DB时,我使用的是相同的webvc\u-READ模式,效果很好:

N.B.:该行为似乎仅与JDBC模板相关。以下JPA查询运行良好:

"select  a from Account a, Links l where l.accountId = a.id and l.loanKey = :loanKey and l.linkSystem = :systemName and(upper(a.status) <> 'TERMINATED' or upper(a.condition) <>'STOPPED' )";
以及这样配置的实体(无显式模式):

这里可能出了什么问题?这是一个有意义的错误还是仅仅是一个占位符?也许有人能给我一些有用的建议,帮助我找到问题的症结所在


提前感谢。

罪魁祸首是我的存储库中的以下不正确和不必要的定义:

@Autowired
public void setDataSource(DataSource dataSource) {
        this.template = new JdbcTemplate(dataSource);
    }

它已经在配置类中定义,并且它的重新定义导致了所有的破坏。

罪魁祸首是我的存储库中的以下不正确和不必要的定义:

@Autowired
public void setDataSource(DataSource dataSource) {
        this.template = new JdbcTemplate(dataSource);
    }

它已经在配置类中定义,并且它的重新定义导致了所有的破坏。

如果在AccountLinksRespositoryCustomImpl.STATIC\u QUERY\u PART变量中用ACCOUNT替换BNYMACS.ACCOUNT,用LINKS替换BNYMACS.LINKS,会发生什么情况?@Guymage相同的异常在应用程序中发生,结果相同(并且没有异常)在SQL客户端中,您在应用程序中使用的用户是否被授予访问所有表的权限?@SimonMartinelli:不确定,根据我目前提供的信息,是否可以确定,或者需要其他任何东西来确定?您是否为表授予权限?您可以使用应用程序用户执行SQL查询吗?如果在AccountLinksRespositoryCustomImpl.STATIC\u query\u部分变量中用ACCOUNT替换BNYMACS.ACCOUNT,用LINKS替换BNYMACS.LINKS,会发生什么情况?@GYMAGE相同的异常在应用程序中发生,结果相同(并且没有异常)在SQL客户端中,您在应用程序中使用的用户是否被授予访问所有表的权限?@SimonMartinelli:不确定,根据我目前提供的信息,是否可以确定,或者需要其他任何东西来确定?您是否为表授予权限?您可以使用应用程序用户执行SQL查询吗?
curl --location --request GET 'http://localhost:7010/exs/acs/accounts-links?limit=20&q=632626&showActive=false&systemName=IMMS' \
--header 'Content-Type: application/json'
"select  a from Account a, Links l where l.accountId = a.id and l.loanKey = :loanKey and l.linkSystem = :systemName and(upper(a.status) <> 'TERMINATED' or upper(a.condition) <>'STOPPED' )";
spring.jpa.properties.hibernate.default_schema=BNYMACS
@Entity(name="Account")
@Table(name="ACCOUNT")
public class Account implements Serializable{...}


@Entity
@Table(name="LINKS")
@Data
public class Links implements Serializable{...}
@Autowired
public void setDataSource(DataSource dataSource) {
        this.template = new JdbcTemplate(dataSource);
    }