首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法启动Spring :当“DialectResolutionInfo”未设置时,对hibernate.dialect的访问不能为空

无法启动Spring :当“DialectResolutionInfo”未设置时,对hibernate.dialect的访问不能为空
EN

Stack Overflow用户
提问于 2019-11-05 09:52:18
回答 1查看 663关注 0票数 0

作为一名开发人员,我想开发一个Spring来访问Oracle9i数据库,通过存储过程获取记录,我想通过application.yml连接到数据库,但是我使用配置文件application.properties启动了这个项目

我在application.properties中声明这个

代码语言:javascript
复制
    spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.hibernate.dialect=org.hibernate.dialect.Oracle9iDialect
spring.jpa.database=default
spring.main.allow-bean-definition-overriding=true 
spring.datasource.driverClassName=oracle.jdbc.OracleDriver
spring.jpa.database-platform=org.hibernate.dialect.Oracle9iDialect

在application.yml中

代码语言:javascript
复制
 jpa:
    hibernate:
      ddl-auto: none

      naming:
        physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
        implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
    properties:
      hibernate:
        proc.param_null_passing: true
        dialect: org.hibernate.dialect.Oracle9iDialect
    show-sql: true 

当涉及到执行时,它会引发以下异常

代码语言:javascript
复制
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

请告诉我修改类或配置文件的其他方法好吗?下面是我的配置类代码:

代码语言:javascript
复制
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy;
import org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import java.util.Properties;

@Configuration
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class,
        DataSourceTransactionManagerAutoConfiguration.class})
@EnableTransactionManagement
@EnableJpaRepositories(
         entityManagerFactoryRef = "productEntityManagerFactory",
         transactionManagerRef = "productTransactionManager",
        basePackages = {"com.pccw.ruby.repository"})

public class DBConfiguration {

    @Primary
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Primary
    @Bean
    LocalContainerEntityManagerFactoryBean entityManagerFactory() {

        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        vendorAdapter.setGenerateDdl(false);
        vendorAdapter.setShowSql(true);

        LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
        factoryBean.setDataSource(dataSource());
        factoryBean.setJpaVendorAdapter(vendorAdapter);
        factoryBean.setPackagesToScan("com.pccw.ruby.domain");

        Properties jpaProperties = new Properties();
        jpaProperties.put("hibernate.proc.param_null_passing", new Boolean(true));
        jpaProperties.put("hibernate.implicit_naming_strategy", SpringImplicitNamingStrategy.class.getName());
        jpaProperties.put("hibernate.physical_naming_strategy", SpringPhysicalNamingStrategy.class.getName());
        factoryBean.setJpaProperties(jpaProperties);

        return factoryBean;
    }

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

这是我的oracle数据库版本:

Oracle9i企业版发布9.2.0.6.0-64位产品

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-05 10:03:08

代码语言:javascript
复制
    Properties jpaProperties = new Properties();
    jpaProperties.put("hibernate.proc.param_null_passing", new Boolean(true));
    jpaProperties.put("hibernate.implicit_naming_strategy", SpringImplicitNamingStrategy.class.getName());
    jpaProperties.put("hibernate.physical_naming_strategy", SpringPhysicalNamingStrategy.class.getName());
    jpaProperties.put("hibernate.dialect", "org.hibernate.dialect.Oracle9iDialect");

试着把它放在这里。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58708683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档