«java.sql.SQLSyntaxErrorException: ORA-00942: таблица или представление не существует» при использовании @Primary на одном из двух bean-компонентов SQLSessionFactory - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть два источника данных, оба работают нормально по отдельности.Но когда я использую @Primary на одном из двух SqlSessionFactory, другой начинает выдавать исключение, упомянутое ниже:

Исключение в потоке "main" org.springframework.beans.factory.BeanCreationException: Ошибка при создании bean-компонентас именем 'pServiceImpl': сбой вызова метода init;Вложенное исключение - 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, PS, 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..CROUP_id = C..CROPT_ID= '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.postProcessBeforeInitializationost13Player.Reg.Exchange.Exchange.Exchange.Exchange.Exchange.Exchange.Exchange.Exchange.Exchange.ReaderBase..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 (AbstractAutowireCapable.ega.306) в org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:230) в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:302)AbstractBeanFactory.java:197) в org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java:761) в org.springframework.context.support.Axt_Axt,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, PS, 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_T)'30' день от двойного) и S.SCHEDULE_PICKUP_IND = 'Y'

Причина: java.sql.SQLSyntaxErrorException: ORA-00942: таблица или представление не существует

;плохая грамматика SQL [];Вложенное исключение - java.sql.SQLSyntaxErrorException: ORA-00942: таблица или представление не существует

в org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate (SQLErrorCodeSQLEfrag.jpg_rag.jpg_traf.jpg_traf_s_t_t_t_t__t_t_t_t_t_t_t__t_t__t__t__t__t_t_t__t__t__t__t__r_). supportcom.sun.proxy. $ Proxy26.selectList (неизвестный источник) в org.mybatis.spring.SqlSessionTemplate.selectList (SqlSessionTemplate.java:230) в org.apache.ibatis.binding.MapperMethod.executeForMany. MajjMetho7 (MapperMetho7)в 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.Impl.java: 46) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke (неизвестный источник) в java(Unknown Source) в 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

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

У меня так получилось.Удалена автоматическая регистрация Mapper (т.е. @Mapper) и вручную зарегистрирован 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);
    }
0 голосов
/ 29 ноября 2018

Если изменение расположения аннотации @Primary исправляет это, это означает, что в конфигурации вашей пружины вы используете автоматическое подключение по типу SqlSessionFactory в SqlSessionTemplate, которое используется PDAOImpl, или автоматическое подключение по типуSqlSessionTemplate в PDAOImpl.

Убедитесь, что вы явно указали правильную зависимость.

Вы получаете эту ошибку, потому что PDAOImpl использует неправильный SqlSessionFactory, который делает вызовы к базе данныху которого нет этой таблицы.

...