Hibernate默认架构和表注释

CAP*_*OCK 6 schema hibernate spring-data spring-boot

我正在使用Spring Boot 1.3.5Hibernate 5.1.告诉Hibernate调用要使用的模式的属性是

spring.jpa.properties.hibernate.default_schema
Run Code Online (Sandbox Code Playgroud)

然而,值(模式名称,让我们说开发),不知何故,在创建表时,它不会被拾取spring.jpa.hibernate.ddl-auto.让它工作的唯一方法(至少对我的情况有效)是每个实体类都有定义的模式名称

 @Table(name = "some_table", schema = "development")
Run Code Online (Sandbox Code Playgroud)

如果可以在spring引导应用程序属性中定义的模式中创建表,那将是很好的(可以作为ENV传递给不同的环境).如果未在@Table注释中指定模式,则表将在公共模式中创建.

有没有办法为表设置模式而不在表注释中设置它,但只有属性文件配置?

CAP*_*OCK 7

一年后,现在的应用演变,我使用Spring Boot 1.5.4Hibernate 5.1.5Postgres 9.6.不确定以前版本是否存在问题,但现在它可以正常工作.

yaml 配置文件:

spring:
   datasource:
      driver-class-name: org.postgresql.Driver
      platform: postgresql
   jpa:
      properties:
         hibernate:
            dialect: org.hibernate.dialect.PostgreSQL94Dialect
            default_schema: SCHEMA_NAME
Run Code Online (Sandbox Code Playgroud)

虽然使用9.6,PostgreSQL94Dialect可以用于9.4及更高版本,因为对于给定的Hibernate版本没有特定的PostgreSQL96Dialect.

有了这个,就不需要在@Table注释中指定模式.

2018年10月更新

请参阅Hibernate的存储库以获取支持的方言,并将git标签设置为您的Hibernate版本:https://github.com/hibernate/hibernate-orm/tree/master/hibernate-core/src/main/java/org/hibernate/dialect