为什么Spring Boot无法推导出Hibernate方言?

问题描述 投票:0回答:1

我无法启动我的 Spring Boot 应用程序

Caused by: org.hibernate.service.spi.ServiceException: 
Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due 
to: Unable to determine Dialect without JDBC metadata 
(please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a 
custom Dialect implementation must be provided)

这是我的应用程序属性(全部):

spring:
  datasource:
    username: ${POSTGRES_USERNAME:postgres}
    password: ${POSTGRES_PASSWORD:postgres}
    url: ${POSTGRES_URL:jdbc:postgresql://localhost:5432/${POSTGRES_USERNAME}}

这是我的 pom。我尝试修剪以仅包含相关部分(同时确保它仍然是您可以复制和粘贴的有效 pom)。基本上,要重现它,您只需要创建一个带有数据启动器(也可能是驱动程序)的引导项目,以便引导的自动配置(带有

DataSource
的那个)启动

<?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 https://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>3.2.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>token-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>token-service</name>
    <description>token-service</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>
    </dependencies>
</project>

如果我显式设置

spring.jpa.database-platform
属性,它会正常启动。不过我以前用MySQL的时候从来没有这样做过

spring:
# ...
  jpa:
    database-platform: org.hibernate.dialect.PostgreSQLDialect

为什么Boot无法推断方言?

java spring-boot hibernate spring-data-jpa
1个回答
0
投票

我将 Spring Boot 与 Postgres 一起使用,没有手动设置方言,但你必须记住这一点。

只有 Hibernate 6 或更高版本可以根据连接的数据库库进行自动方言解析。否则,您必须手动提供。

因此,请确保您使用的是 Hibernate v6 或更高版本,如果没有更新它或只是像您一样设置方言;大多数情况下影响不大。

您可以看到 Hibernate v6 如何推导方言以及为什么这只在该版本之后才会发生 这里

© www.soinside.com 2019 - 2024. All rights reserved.