我有两个适当的数据源,它们分别工作正常。但是,当我在两个SqlSessionFactory之一上使用@Primary
时,另一个开始引发下面提到的异常:
线程“主”中的异常 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, 来自P_EVENT_TRACKING SE,PS的CA.CONTACT_ADDR_ID, 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, 来自P_EVENT_TRACKING SE,PS的CA.CONTACT_ADDR_ID, 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(未知源)处 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(本机方法)处 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个
答案 0 :(得分:2)
如果更改@Primary
注释的位置可以解决此问题,则意味着在您的Spring配置中,您将SqlSessionFactory
的类型使用自动装配成{{ 1}}或根据SqlSessionTemplate
中PDAOImpl
的类型自动布线。
确保您明确指定正确的依赖项。
您会收到此错误,因为SqlSessionTemplate
使用了错误的PDAOImpl
,这会导致不具有该表的数据库被调用。
答案 1 :(得分:0)
这样对我有用。删除了映射器的自动注册(即@Mapper
),并在SQLSessionTemplate
中手动注册了映射器,如下所示:
@Bean
public TestMapper testMapper() throws Exception {
SqlSessionTemplate sessionTemplate = new SqlSessionTemplate(sqlSessionFactory());
sessionTemplate.getConfiguration().addMapper(TestMapper.class); // new code
return sessionTemplate.getMapper(TestMapper.class);
}