问题描述
我正在开发一个 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.hibernate
和 spring.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 没有的配置属性。
为了简单起见,仅是约定俗成。只关心 value
的 key
。
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
都一样。
另外,spring.jpa.properties.*中的所有属性都通过 作为普通的 JPA 属性(去掉前缀),当 本地 EntityManagerFactory 已创建。