Spring Boot 引起:org.hibernate.hibernateException:如果未设置“hibernate.dialect”,则对DialectResolutionInfo的访问不能为null,

jckbn6z7  于 2023-05-17  发布在  Spring
关注(0)|答案(9)|浏览(238)

设置hibernate.dialect属性后仍出现异常。我使用的是Hibernate 5.0.11和Sping Boot 1.4.2,MySQL版本为5.7

application.properties is like this

# Hibernate
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql=true
hibernate.hbm2ddl.auto=validate

pom.xml

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

有什么问题吗?

sxissh06

sxissh061#

properties文件中添加以下行可以解决这个问题。

spring.jpa.database=mysql
bttbmeg0

bttbmeg02#

我也遇到了类似的问题,但意识到我没有从复制和粘贴到从Springboot的tutorial创建的www.example.com文件中正确定制DB名称字段application.properties:

spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://localhost:3306/db_example
spring.datasource.username=springuser
spring.datasource.password=ThePassword

请确保将db_examplespringuserThePassword替换为实际值。
对我自己来说只是一个“duh”的时刻,但可能对别人有一些用处。

zvokhttg

zvokhttg3#

也许你已经解决了这个问题,但我有一个类似的问题。
在mysql中添加显式的运行时依赖应该可以解决这个问题:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

这允许spring Boot 基于classpath自动配置jdbc相关的beans。

e4yzc0pl

e4yzc0pl4#

创建配置后添加以下内容可解决问题:

configuration.configure("hibernate.cfg.xml");
hfwmuf9z

hfwmuf9z5#

我很明显地错过了:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

这篇文章也有一些有用的提示:org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

bkhjykvo

bkhjykvo6#

在我的例子中,我在排除了数据库的情况下启动了我的spring Boot 应用程序:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, SecurityAutoConfiguration.class})

然后,当我开始创建JPA类时,我得到了一个错误,我试图修复它:

@Bean(name = "entityManagerFactory")
public LocalSessionFactoryBean sessionFactory() {
    return new LocalSessionFactoryBean();
}

这导致了问题中提到的例外情况。
因此,解决方案当然是简单地从@SpringBootApplication注解中删除DataSourceAutoConfiguration.class,但我花了一些时间才注意到错误。

v1l68za4

v1l68za47#

在连接到Oracle数据库时,我的Sping Boot 项目也遇到了同样的问题。
以下是我执行的故障排除步骤-
1.确保相关的hibernate属性存在于application.properties文件hibernate.dialect=org.hibernate.dialect.Oracle12cDialect中,
spring.jpa.hibernate.ddl-auto=update
方言取决于您使用的数据库。hibernate.ddl-auto也可以是5个属性之一。
1.验证JDBC URL。例如,oracle的连接字符串类似于jdbc:oracle:thin:@10.10.32.20:1521/SRV_LICENSING_D1
1.验证数据库凭据。
1.请确保在属性文件中使用的服务名称为大写。因为hibernate是大小写敏感的。例如,在oracle的情况下,服务名称将类似于SRV_LICENSING_D1

os8fio9y

os8fio9y8#

原因:db方言时数据库连接不满意,哪个数据库不重要。
解决方案:更正www.example.com中的连接字符串application.properties(或其位置)

juzqafwq

juzqafwq9#

在我的例子中,问题是我的自定义DialectResolver的访问修饰符。不是public。Rookie mistake:)

相关问题