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

问题描述

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

目前在我的应用程序中,我有以下属性

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.hiberante

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

解决方法

这在 Spring Boot documentation 中有解释:

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

因此,spring.jpa.hibernate.X 属性被 Spring 使用,而 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 只是为了便于记忆。

另外,spring.jpa.properties.*中的所有属性都通过 作为普通的 JPA 属性(去掉前缀),当 本地 EntityManagerFactory 已创建。

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