Hibernate默认架构和表注释

时间:2016-06-30 19:43:11

标签: hibernate spring-boot schema spring-data

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

spring.jpa.properties.hibernate.default_schema

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

定义的模式名称
 @Table(name = "some_table", schema = "development")

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

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

3 个答案:

答案 0 :(得分:7)

现在应用程序发展一年后,我正在使用Spring Boot 1.5.4Hibernate 5.1.5 Postgres 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

虽然使用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

答案 1 :(得分:1)

如果使用hibernate session factory,则可以添加此配置;

XMLGregorianCalendar xmlC;
Calendar cal=Calendar.getInstance();
try {
    xmlC = DatatypeFactory.newInstance().newXMLGregorianCalendar();
    xmlC.setYear(cal.get(Calendar.YEAR));
    ....

答案 2 :(得分:0)

对不起,您的回复很晚。但是除了架构之外,还添加

spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false

到您的属性文件。