【发布时间】:2019-04-29 23:11:34
【问题描述】:
我有两个数据源,它们分别工作正常。但是,当我在两个 SqlSessionFactory 之一上使用 @Primary 时,另一个开始抛出下面提到的异常:
线程“main”中的异常 org.springframework.beans.factory.BeanCreationException:错误 创建名为“pServiceImpl”的bean:调用 初始化方法失败;嵌套异常是 org.springframework.jdbc.BadSqlGrammarException:查询错误 数据库。原因:java.sql.SQLSyntaxErrorException:ORA-00942:表 或视图不存在
com/abc/def/mapper/pMapper.java 中可能存在错误(最佳猜测)
错误可能涉及defaultParameterMap
设置参数时出错
SQL:选择 C.CONTACT_ID、C.REF_ID、S.P_ID、S.COURIER_P_NUM、S.SENDER_ADDR_ID、S.CREATION_TS、 CA.CONTACT_ADDR_ID 来自 P_EVENT_TRACKING SE, P S, CONTACT_ADDR CA, CONTACT C 其中 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.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:137) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 在 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) 在 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:选择 C.CONTACT_ID、C.REF_ID、S.P_ID、S.COURIER_P_NUM、S.SENDER_ADDR_ID、S.CREATION_TS、 CA.CONTACT_ADDR_ID 来自 P_EVENT_TRACKING SE, P S, CONTACT_ADDR CA, CONTACT C 其中 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) 在 org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446) 在 com.sun.proxy.$Proxy26.selectList(Unknown Source) 在 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.invoke(MapperProxy.java:59) 在 com.sun.proxy.$Proxy32.findPByOutlet(未知来源) com.abc.def.dao.PDAOImpl.getPByOutlet(PDAOImpl.java:23) 在 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(Unknown Source) at 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 更多
【问题讨论】:
-
你可能认为'P'是有效的表名(比如说POWER),我只是重命名了它,因为我不能公布真实的名字。此外,SQL 查询是正确的,因为当我从第一个删除注释并使用 @Primary 放置在第二个 SQLSessionFactory 上时它工作正常
标签: java spring oracle spring-mvc mybatis