java - 在两个 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 更多
解决方案
如果更改@Primary
注释的位置可以解决此问题,则意味着在您的 spring 配置中,您正在使用 in 的类型SqlSessionFactory
自动装配,或者使用 in 的类型SqlSessionTemplate
自动装配。PDAOImpl
SqlSessionTemplate
PDAOImpl
确保明确指定正确的依赖关系。
您收到此错误是因为PDAOImpl
使用不正确SqlSessionFactory
的方法调用了没有该表的数据库。
推荐阅读
- c++ - 如何通过 Windows API 枚举系统的所有知名 SID?
- c - Vim:在终端中编译和运行 C 程序
- java - Java Scanner 阅读领先空间
- python - 在 python 的 asctime 中使用毫秒和日志消息
- java - NoClassDefFoundError 十进制格式
- r - 如何获得R中像素簇的大小
- assembly - 操作码:十六进制汇编指令
- javascript - MongoDB如何过滤db.admin命令输出
- google-signin - One Tao 登录 (YOLO API) - 本地化
- node.js - 如何允许网站在电子桌面应用程序中播放受保护的内容