【问题标题】:Caused by: java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist引起:java.sql.SQLSyntaxErrorException:ORA-00942:表或视图不存在
【发布时间】:2020-03-02 19:14:23
【问题描述】:

ORA-00942:表或视图不存在:更新 Spring Boot 后 1.4.9 到 2.0.9 和休眠到 5.2.18.FINAL

当我通过实体管理器使用它时它可以工作,但是当我尝试通过 JPA Repository 然后它抛出这个错误。有人能帮帮我吗?
我使用了以下依赖项

      <hibernate.version>5.2.18.Final</hibernate.version>

      <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.0.9.RELEASE</version>
          </dependency>

     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>2.0.9.RELEASE</version>
          </dependency>

    <dependency>
          <groupId>com.oracle.jdbc</groupId>
          <artifactId>ojdbc8</artifactId>
          <version>12.2.0.1</version>
          <scope>compile</scope>
        </dependency>

我的 JPAConfig.java

         @ConditionalOnProperty(name = "embedded", havingValue = "true", 
         matchIfMissing = true)
         @Configuration
         @RefreshScope
         @EnableTransactionManagement
         @EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactory", 
         transactionManagerRef = "transactionManager", basePackages = {
            "kgfsl" })
         public class JPAConfig {

        @Bean
        public Validator getValidator() {
            return new LocalValidatorFactoryBean();
        }

        @Value("${db.url}")
        String dbUrl = "jdbc:oracle:thin:@10.100.1.95:1539:HFSL12C";

        @Value("${db.driverClassName}")
        String dbDriverClassName = "oracle.jdbc.driver.OracleDriver";

        @Value("${db.userName}")
        String dbUserName = "QARMSV2";

        @Value("${db.password}")
        String dbPassword = "QARMSV2";

        @Value("${db.databaseType}")
        String dbDatabaseType = "Oracle";

        @Value("${encryptionOn:false}")
        private boolean encryptionOn;

        @Bean
        @Primary
        @RefreshScope
        public DataSource dataSource() {
            DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName(dbDriverClassName);
            dataSource.setUrl(dbUrl);
            dataSource.setUsername(dbUserName);
            if (encryptionOn)
                dataSource.setPassword(CryptoUtil.decrypt(dbPassword));
            else
                dataSource.setPassword(dbPassword);
            return dataSource;
        }

        @Bean
        @Primary
        @RefreshScope
        public Map<String, Object> jpaProperties() {
            Map<String, Object> props = new HashMap<>();
            props.put("hibernate.dialect", 
           ApplicationStartUpFactory.getDialect(dbDatabaseType));       
            props.put("javax.persistence.validation.mode", "none");
            props.put("hibernate.id.new_generator_mappings", "false");  
            //props.put("hibernate.physical_naming_strategy", 
           "org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl");
            // 
            props.put("hibernate.ejb.interceptor",
            "kgfsl.framework.config.AuditColumnWiseInterceptor");
            return props;
            }



            public static int batchSize() {
            return Integer.valueOf(Dialect.DEFAULT_BATCH_SIZE);
            }

           @Primary
           @Bean
           public JpaVendorAdapter jpaVendorAdapter() {
            HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new 
            HibernateJpaVendorAdapter();
            hibernateJpaVendorAdapter.setShowSql(true);
            hibernateJpaVendorAdapter.setGenerateDdl(false); 
            hibernateJpaVendorAdapter.
            setDatabase(ApplicationStartUpFactory.getJPAVendor(dbDatabaseType));
            return hibernateJpaVendorAdapter;
            }

           @Primary
           @Bean
           public PlatformTransactionManager transactionManager() {
            return new 
           JpaTransactionManager(entityManagerFactory().getObject());
            }

          @Bean
          @Primary
          public LocalContainerEntityManagerFactoryBean 
            entityManagerFactory() {
            LocalContainerEntityManagerFactoryBean lef = new 
            LocalContainerEntityManagerFactoryBean();
            lef.setDataSource(this.dataSource());
            lef.setJpaPropertyMap(this.jpaProperties());
            lef.setJpaVendorAdapter(this.jpaVendorAdapter());

            // lef.setPackagesToScan("hfsl");
            String entityPackages = "hfsl.*.*";
            lef.setPackagesToScan(entityPackages.split(","));
            lef.setPersistenceUnitName("default"); // <- giving 'default' 
           as name

            return lef;
            }

            @Bean()
            @Qualifier("jdbcTemplate")
            public JdbcTemplate jdbcTemplate() {
            return new JdbcTemplate(this.dataSource());
            }

        @Bean(name = "namedParameterJdbcTemplate")
        public NamedParameterJdbcTemplate namedParameterJdbcTemplate() {
            return new NamedParameterJdbcTemplate(this.dataSource());
          }

        @SuppressWarnings("unused")
        private DatabasePopulator createDatabasePopulator() {
            ResourceDatabasePopulator databasePopulator = new 
           ResourceDatabasePopulator();
            databasePopulator.setContinueOnError(false);
            /*
             * if (new ClassPathResource("basic_table.sql").exists())
             * databasePopulator.addScript(new 
         ClassPathResource("basic_table.sql"));
             */
            return databasePopulator;
           }

           @Bean
           @Primary
           public PhysicalNamingStrategy physical() {
            return new PhysicalNamingStrategyStandardImpl();
            }

          @Bean
          @Primary
          public ImplicitNamingStrategy implicit() {
            return new ImplicitNamingStrategyLegacyJpaImpl ();
          }
          }

我有以下错误:

Caused by: java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist

at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:494)
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:446)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1054)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:623)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:252)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:612)
at 

oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:226)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:59)
    at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:747)
    at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:904)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1082)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3780)
    at oracle.jdbc.driver.T4CPreparedStatement.executeInternal(T4CPreparedStatement.java:1343)
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3822)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1165)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:60)
    ... 161 more
Caused by: Error : 942, Position : 1387, Sql = select client0_.CLIENT_CODE as CLIENT_CODE1_63_, client0_.createdAt as createdAt2_63_, client0_.createdBy as createdBy3_63_, client0_.active as active4_63_, client0_.approvedAt as approvedAt5_63_, client0_.approvedBy as approvedBy6_63_, client0_.modifiedAt as modifiedAt7_63_, client0_.modifiedBy as modifiedBy8_63_, client0_.AREA as AREA9_63_, client0_.BUILDING as BUILDING10_63_, client0_.CATEGORY_CODE as CATEGORY_CODE11_63_, client0_.CITY as CITY12_63_, client0_.CLIENT_CREATED_FROM as CLIENT_CREATED_FR13_63_, client0_.CLIENT_TYPE as CLIENT_TYPE14_63_, client0_.COUNTRY as COUNTRY15_63_, client0_.EMAIL_ID as EMAIL_ID16_63_, client0_.IS_ERROR as IS_ERROR17_63_, client0_.FAX_NO as FAX_NO18_63_, client0_.FULL_NAME as FULL_NAME19_63_, client0_.GLOBAL_REF_ID as GLOBAL_REF_ID20_63_, client0_.id as id21_63_, client0_.MOBILE_NO as MOBILE_NO22_63_, client0_.NAME as NAME23_63_, client0_.PAN_NO as PAN_NO24_63_, client0_.IS_PARENT as IS_PARENT25_63_, client0_.PARENT_CODE as PARENT_CODE26_63_, client0_.PHONE_NO as PHONE_NO27_63_, client0_.PIN_CODE as PIN_CODE28_63_, client0_.PRIORITY_TYPE as PRIORITY_TYPE29_63_, client0_.IS_PROP as IS_PROP30_63_, client0_.REMARK as REMARK31_63_, client0_.SEBI_REG_EXPIRY_DATE as SEBI_REG_EXPIRY_D32_63_, client0_.SEBI_REG_NO as SEBI_REG_NO33_63_, client0_.STATE as STATE34_63_, client0_.STREET as STREET35_63_, client0_.USER_ID as USER_ID36_63_ from M_CLIENT client0_, OriginalSql = select client0_.CLIENT_CODE as CLIENT_CODE1_63_, client0_.createdAt as createdAt2_63_, client0_.createdBy as createdBy3_63_, client0_.active as active4_63_, client0_.approvedAt as approvedAt5_63_, client0_.approvedBy as approvedBy6_63_, client0_.modifiedAt as modifiedAt7_63_, client0_.modifiedBy as modifiedBy8_63_, client0_.AREA as AREA9_63_, client0_.BUILDING as BUILDING10_63_, client0_.CATEGORY_CODE as CATEGORY_CODE11_63_, client0_.CITY as CITY12_63_, client0_.CLIENT_CREATED_FROM as CLIENT_CREATED_FR13_63_, client0_.CLIENT_TYPE as CLIENT_TYPE14_63_, client0_.COUNTRY as COUNTRY15_63_, client0_.EMAIL_ID as EMAIL_ID16_63_, client0_.IS_ERROR as IS_ERROR17_63_, client0_.FAX_NO as FAX_NO18_63_, client0_.FULL_NAME as FULL_NAME19_63_, client0_.GLOBAL_REF_ID as GLOBAL_REF_ID20_63_, client0_.id as id21_63_, client0_.MOBILE_NO as MOBILE_NO22_63_, client0_.NAME as NAME23_63_, client0_.PAN_NO as PAN_NO24_63_, client0_.IS_PARENT as IS_PARENT25_63_, client0_.PARENT_CODE as PARENT_CODE26_63_, client0_.PHONE_NO as PHONE_NO27_63_, client0_.PIN_CODE as PIN_CODE28_63_, client0_.PRIORITY_TYPE as PRIORITY_TYPE29_63_, client0_.IS_PROP as IS_PROP30_63_, client0_.REMARK as REMARK31_63_, client0_.SEBI_REG_EXPIRY_DATE as SEBI_REG_EXPIRY_D32_63_, client0_.SEBI_REG_NO as SEBI_REG_NO33_63_, client0_.STATE as STATE34_63_, client0_.STREET as STREET35_63_, client0_.USER_ID as USER_ID36_63_ from M_CLIENT client0_, Error Msg = ORA-00942: table or view does not exist

    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:498)
    ... 176 more

【问题讨论】:

  • 数据库中有没有表M_CLIENT
  • 底部的一条消息给出了以Caused by: Error : 942, Position : 1387 开头的一行,提到了根本原因并告诉表(表的名称应该在M_CLIENT 之后或在摘录@987654326 之后@) 不存在(例如,您当前连接的用户无法访问)。
  • 最喜欢你没有用表名注释你的实体,可以告诉我们你的实际表名和相应的实体
  • 是的,我有一个表 M_CLIENT - 更新前一切都很好。更新springboot和hibernate后只会出现这个错误。
  • 各自的实体是客户端 -@Entity @Table(name = "M_CLIENT") public class Client

标签: oracle hibernate spring-boot jpa


【解决方案1】:

由于您的查询很长,无法粘贴到评论中,一些调试步骤

  1. 使用 SQL plus(oracle 客户端)或 Toad 连接到数据库
  2. 使用 QARMSV2/QARMSV2 连接
  3. 执行了以下查询
  4. 如果您的查询有效,请执行相同的程序纯 JDBC 程序

选择client0_.CLIENT_CODE 作为CLIENT_CODE1_63_,client0_.createdAt 作为 createdAt2_63_, client0_.createdBy 作为 createdBy3_63_, client0_.active 作为 active4_63_,client0_.approvedAt 作为 批准At5_63_,client0_.approvedBy 为approvedBy6_63_, client0_.modifiedAt as modifiedAt7_63_, client0_.modifiedBy as modifiedBy8_63_,client0_.AREA 为 AREA9_63_,client0_.BUILDING 为 BUILDING10_63_,client0_.CATEGORY_CODE 为 CATEGORY_CODE11_63_, client0_.CITY 作为 CITY12_63_,client0_.CLIENT_CREATED_FROM 作为 CLIENT_CREATED_FR13_63_,client0_.CLIENT_TYPE 为 CLIENT_TYPE14_63_, client0_.COUNTRY 为 COUNTRY15_63_,client0_.EMAIL_ID 为 EMAIL_ID16_63_、client0_.IS_ERROR 为 IS_ERROR17_63_、client0_.FAX_NO 作为 FAX_NO18_63_,client0_.FULL_NAME 作为 FULL_NAME19_63_, client0_.GLOBAL_REF_ID 为 GLOBAL_REF_ID20_63_,client0_.id 为 id21_63_,client0_.MOBILE_NO 作为 MOBILE_NO22_63_,client0_.NAME 作为 NAME23_63_,client0_.PAN_NO 作为 PAN_NO24_63_,client0_.IS_PARENT 作为 IS_PARENT25_63_,client0_.PARENT_CODE 为 PARENT_CODE26_63_, client0_.PHONE_NO 为 PHONE_NO27_63_,client0_.PIN_CODE 为 PIN_CODE28_63_,client0_.PRIORITY_TYPE 为 PRIORITY_TYPE29_63_, client0_.IS_PROP 作为 IS_PROP30_63_,client0_.REMARK 作为 REMARK31_63_, client0_.SEBI_REG_EXPIRY_DATE 作为 SEBI_REG_EXPIRY_D32_63_, client0_.SEBI_REG_NO 作为 SEBI_REG_NO33_63_,client0_.STATE 作为 STATE34_63_,client0_.STREET 作为 STREET35_63_,client0_.USER_ID 作为 USER_ID36_63_ 来自 M_CLIENT 客户端0_

【讨论】:

  • 在Toad中执行成功
  • 好的,现在试试 JDBC,我怀疑你没有连接到正确的架构
  • 什么是架构名称
  • QARMSV2 是架构名称
  • 当我使用 JDBC 连接时它可以工作,但再次通过 JPA 会引发相同的错误
猜你喜欢
  • 2020-07-19
  • 1970-01-01
  • 2016-09-18
  • 2019-01-22
  • 2015-11-09
  • 2011-12-10
  • 2019-04-29
  • 2015-01-30
相关资源
最近更新 更多