spring.jpa.properties.hibernate 和 spring.jpa.hibernate 之间的区别

我正在开发一个 spring boot 项目,并使用带有 Hibernate 的 spring data jpa 作为 JPA 实现。

目前在我的 application.yml 我有以下属性,

spring:
    jpa:
        show-sql: true
        properties:
            hibernate:
                format_sql: true
                generate_statistics: true
        hibernate:
            ddl-auto: none
            dialect: org.hibernate.dialect.H2Dialect

有不同前缀的 Hibernate 属性( spring.jpa.properties.hibernatespring.jpa.hibernate

有这些差异的目的是什么,它们可以互换使用,这意味着我可以用 spring.jpa.properties.hibernate.format_sql 替换 spring.jpa.hibernate.format_sql 吗?

stack overflow Difference between spring.jpa.properties.hibernate and spring.jpa.hibernate
原文答案
author avatar

接受的答案

这在 Spring Boot documentation 中有解释:

-- spring.jpa.properties.* 中的所有属性在创建本地 EntityManagerFactory 时作为普通 JPA 属性(去除前缀)传递。

因此,Spring 使用 spring.jpa.hibernate.X 属性,并且将 spring.jpa.properties 传递给您正在使用的任何 JPA 实现,从而允许您设置 Spring 没有的配置属性。


答案:

作者头像

为简化起见,确切地说,只有约定。只关心 valuekey

spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format-sql=true
spring.jpa.properties.hibernate.generate_statistics=true
spring.jpa.hibernate.ddl-auto=true
spring.jpa.hibernate.dialect=org.hibernate.dialect.H2Dialect

或者

spring.jpa.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=true
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format-sql=true
spring.jpa.properties.hibernate.generate_statistics=true

是相同的。

有关更多信息,您可以查看 https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-configure-jpa-properties

https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-configure-hibernate-naming-strategy 只是为了方便记忆。

此外,当创建本地 EntityManagerFactory 时,spring.jpa.properties.* 中的所有属性都作为普通 JPA 属性(去除前缀)传递。

(来源: https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-configure-jpa-properties