8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

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

B''H Bi'ezras -- Boruch Hashem 2月前

35 0

我无法启动我的 Spring Boot 应用程序原因:org.hibernate.service.spi.ServiceException:无法创建请求的服务 [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment],原因是:U...

我无法启动我的 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)。基本上,要重现它,您只需创建一个带有数据启动器(可能还有驱动程序)的 Boot 项目,以便 Boot 的自动配置(带有 的那个 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 不能推断出方言?

帖子版权声明 1、本帖标题:为什么Spring Boot无法推断Hibernate方言?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由B''H Bi'ezras -- Boruch Hashem在本站《hibernate》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 该问题是由于数据源 URL 不正确造成的。当我提供正确的 URL 时,它就可以正常工作。例如:

    数据源:url:jdbc:postgresql://localhost:5432/postgres

  • 对于 Springboot 和 JPA,这是 url 问题。我使用的是客户端 IP,而不是 pg 服务器 IP。

  • 令人困惑的是,当数据库无法访问时也会抛出此错误。

    因此,请仔细检查数据库是否确实运行正确,并且您可以通过其他方式进行连接。

    然后仔细检查您的 spring.datasource.url 财产,您不需要添加其他财产。

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

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

    因此,请确保您使用的是 Hibernate v6 或更高版本。如果不更新它(请小心,也许您必须更新代码中的其他内容),或者只是像您之前那样设置方言;在大多数情况下,它不会产生太大影响。

    在此处 查看 Hibernate v6 如何推断方言以及为什么这种情况只在该版本之后发生

  • 您可能会看到此错误的一个原因是您的 spring.datasource 定义无效。例如,我的 URL 中的端口不正确。

    Spring 无法连接到数据库来确定方言,我收到了此消息。

  • 我确信您的 jdbc url 是错误的。Hibernate 在无法连接时经常会说无法确定方言。使用文字配置进行检查,并首先证明这一点。

返回
作者最近主题: