HSQL 版本和 Spring Boot 2.72:休眠异常:未设置时访问方言解析信息不能为空'hibernate.dialect'



我正在尝试用嵌入式HSQL数据库构建一个应用程序。

我使用的是Spring Boot 2.7.2、Hibernate 6.1.0-Final、Hibernate Core版本5.6.0-Final和带有Java 18的HSQL 2.7.0。

为此,我已经对这个错误做了很多研究,甚至在堆栈溢出方面,但不知何故,它们都不起作用。

首先,这是我的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>

然后,我正在使用以下应用程序属性:

# ===============================
# = 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=

因此,我尝试删除数据源.url(如stackoverflow上的某个地方所读(,但错误突然出现。

然后我找到了一种使用";hsql-config.xml";(有一些配置(,并在我的春季启动入口点使用@ImportResource(值="classpath:/hsql-config.xml"(但这无济于事。

有什么想法可以让它发挥作用吗?我在网上查了几本教程,似乎都没有找到解决方案。

您的数据库URL访问一个单独的HSQLDB服务器实例,该实例应在您的应用程序之前启动,类似于PostgreSQL或MySQL服务器。

spring.datasource.url=jdbc:hsqldb:hsql://localhost/testdb

如果你不想依赖于一个单独的服务器,你可以使用一个文件:数据库URL,它直接从你的应用程序打开数据库。例如:

spring.datasource.url=jdbc:hsqldb:file:C:/dbfiles/testdb

有两个选项。第一个是将HSQLDB作为一个独立的非嵌入式服务器启动。第二个是使数据源bean依赖于加载属性bean,比如第一个答案:HSQLDB是否有某种机制可以将内存中的数据保存到文件中?使用@DependsOn注释。

相关内容

最新更新