首页 > 解决方案 > 在两个 SQLSessionFactory bean 之一上使用 @Primary 时出现“java.sql.SQLSyntaxErrorException:ORA-00942:表或视图不存在”

问题描述

我有两个数据源,它们分别工作正常。但是,当我@Primary在两个 SqlSessionFactory 之一上使用时,另一个开始抛出下面提到的异常:

线程“主”org.springframework.beans.factory.BeanCreationException 中的异常:创建名为“pServiceImpl”的 bean 时出错:调用 init 方法失败;嵌套异常是 org.springframework.jdbc.BadSqlGrammarException:查询数据库时出错。原因:java.sql.SQLSyntaxErrorException:ORA-00942:表或视图不存在

com/abc/def/mapper/pMapper.java 中可能存在错误(最佳猜测)

该错误可能涉及defaultParameterMap

设置参数时出错

SQL:从 P_EVENT_TRACKING SE、PS、CONTACT_ADDR CA、CONTACT C 中选择 C.CONTACT_ID、C.REF_ID、S.P_ID、S.COURIER_P_NUM、S.SENDER_ADDR_ID、S.CREATION_TS、CA.CONTACT_ADDR_ID,其中 SE.EVENT_CD = 'PICKUP' 和SE.P_ID = s.p_id 和 S.SENDER_ADDR_ID = CA.CONTACT_ADDR_ID 和 CA.CONTACT_ID = c.contact_id 和 C.GROUP_CD = 'OT' 和 SE.EVENT_OCCURRED_IND = 'N' 和 S.CREATION_TS >=(选择 CURRENT_TIMESTAMP - 间隔'30' 天从双重)和 S.SCHEDULE_PICKUP_IND = 'Y'

原因:java.sql.SQLSyntaxErrorException:ORA-00942:表或视图不存在

; 糟糕的 SQL 语法 []; 嵌套异常是 java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在

在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409) 在 org.springframework.beans.factory.support.applyBeanPostProcessorsBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:137) .support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory .java:483)在 org.springframework.beans.factory.support.AbstractBeanFactory$1。getObject(AbstractBeanFactory.java:306) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) 在 org.springframework.context.support .AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) 在 org.springframework.context.annotation。AnnotationConfigApplicationContext.(AnnotationConfigApplicationContext.java:84) at com.abc.def.app.starter.Pickup.main(Pickup.java:11) 引起:org.springframework.jdbc.BadSqlGrammarException:

查询数据库时出错。原因:java.sql.SQLSyntaxErrorException:ORA-00942:表或视图不存在

com/abc/def/mapper/PMapper.java 中可能存在错误(最佳猜测)

该错误可能涉及defaultParameterMap

设置参数时出错

SQL:从 P_EVENT_TRACKING SE、PS、CONTACT_ADDR CA、CONTACT C 中选择 C.CONTACT_ID、C.REF_ID、S.P_ID、S.COURIER_P_NUM、S.SENDER_ADDR_ID、S.CREATION_TS、CA.CONTACT_ADDR_ID,其中 SE.EVENT_CD = 'PICKUP' 和SE.P_ID = s.p_id 和 S.SENDER_ADDR_ID = CA.CONTACT_ADDR_ID 和 CA.CONTACT_ID = c.contact_id 和 C.GROUP_CD = 'OT' 和 SE.EVENT_OCCURRED_IND = 'N' 和 S.CREATION_TS >=(选择 CURRENT_TIMESTAMP - 间隔'30' 天从双重)和 S.SCHEDULE_PICKUP_IND = 'Y'

原因:java.sql.SQLSyntaxErrorException:ORA-00942:表或视图不存在

; 糟糕的 SQL 语法 []; 嵌套异常是 java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在

在 org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:231) 在 org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73) 在 org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator .java:73) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446) at com.sun.proxy.$Proxy26.selectList(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.selectList( SqlSessionTemplate.java:230) 在 org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:137) 在 org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:75) 在 org.apache.ibatis .binding.MapperProxy。在 com.abc.def.dao.PDAOImpl.getPByOutlet(PDAOImpl.java:23) 在 com.abc.def.dao.调用 (MapperProxy.java:59) 在 com.sun.proxy.$Proxy32.findPByOutlet(Unknown Source) 在 com.abc.def.service .PickupServiceImpl.startExecution(PickupServiceImpl.java:62) 在 com.abc.def.service.PickupServiceImpl.execute(PickupServiceImpl.java:46) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke (未知来源)在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)在 java.lang.reflect.Method.invoke(未知来源)在 org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java :366) 在 org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata。invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:311) 在 org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:134) ... 13 更多

标签: javaspringoraclespring-mvcmybatis

解决方案


如果更改@Primary注释的位置可以解决此问题,则意味着在您的 spring 配置中,您正在使用 in 的类型SqlSessionFactory自动装配,或者使用 in 的类型SqlSessionTemplate自动装配。PDAOImplSqlSessionTemplatePDAOImpl

确保明确指定正确的依赖关系。

您收到此错误是因为PDAOImpl使用不正确SqlSessionFactory的方法调用了没有该表的数据库。


推荐阅读