You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 2.7.2集成HSQL数据库遇Hibernate方言配置异常求助

解决Hibernate DialectResolutionInfo为空异常(HSQL + Spring Boot集成)

技术栈:Spring Boot 2.7.2、HSQL 2.7.0、Java 18,当前遇到异常:HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set,已尝试移除datasource.url、导入hsql-config.xml等方案无效。

现有配置文件

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.2</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<groupId>de.bloise</groupId>
<artifactId>skt</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
    <maven.compiler.source>18</maven.compiler.source>
    <maven.compiler.target>18</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <hsql.version>2.7.0</hsql.version>
    <hibernate.version>6.1.0.Final</hibernate.version>
    <hibernate.core.version>5.6.10.Final</hibernate.core.version>
</properties>

<dependencies>

    <dependency>
        <groupId>org.hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
        <version>${hsql.version}</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>${hibernate.core.version}</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.6.10.Final</version>
    </dependency>

    <!-- Spring Boot -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

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

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

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

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

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>

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

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>

</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${project.parent.version}</version>
            <configuration>
                <excludes>
                    <exclude>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                    </exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>

application.properties

# ===============================
# = SERVER
# ===============================
server.port= 9050

# HIBERNATE
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
spring.jpa.database-platform=org.hibernate.dialect.HSQLDialect
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.HSQLDialect
spring.jackson.serialization.fail-on-empty-beans=false

# Naming strategy
#spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
#spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy

# Database
spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver
spring.datasource.url=jdbc:hsqldb:hsql://localhost/testdb
spring.datasource.username=sa
spring.datasource.password=

解决思路

1. 修复依赖冲突(核心问题)

Spring Boot 2.7.2默认适配Hibernate 5.6.x版本,你手动引入的hibernate-core、hibernate-entitymanager与Spring Boot管理的版本存在冲突,且Hibernate 5+版本中hibernate-entitymanager已合并到hibernate-core,无需单独引入:

  • 删除pom.xml中手动添加的hibernate-core和hibernate-entitymanager依赖
  • 删除properties中的hibernate.version和hibernate.core.version配置,完全依赖Spring Boot parent的版本管理

2. 修正HSQL数据源配置

你当前使用的是HSQL服务器模式(jdbc:hsqldb:hsql://localhost/testdb),该模式需要单独启动HSQL服务器才能连接,若你实际需要的是嵌入式数据库,请修改url:

  • 内存模式(应用重启后数据丢失):spring.datasource.url=jdbc:hsqldb:mem:testdb
  • 文件模式(数据持久化到文件):spring.datasource.url=jdbc:hsqldb:file:./data/testdb;shutdown=true
    若坚持使用服务器模式,确保HSQL服务器已启动,端口与配置一致。

3. 简化Hibernate配置

  • 保留spring.jpa.database-platform=org.hibernate.dialect.HSQLDialect即可,无需重复设置spring.jpa.properties.hibernate.dialect,Spring Boot会自动识别并应用
  • 可删除spring.datasource.driver-class-name,Spring Boot会根据数据源url自动匹配驱动类

内容的提问来源于stack exchange,提问作者Tony B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 18:57:09