我正在使用Spring Boot 1.3.5
和Hibernate 5.1
。告诉Hibernate调用要使用的模式的属性是
spring.jpa.properties.hibernate.default_schema
值(模式名称,假设开发),然而,在使用spring.jpa.hibernate.ddl-auto
创建表时,它不会被拾取。让它工作的唯一方法(至少对我的情况有效)是每个实体类都有用
@Table(name = "some_table", schema = "development")
如果可以在 spring boot应用程序属性中定义的模式中创建表,那将是很好的(可以作为ENV传递给不同的环境)。如果未在@Table
注释中指定模式,则表将在公共模式中创建。
有没有办法为表设置模式而不在表注释中设置它,但只使用属性文件配置?
答案 0 :(得分:7)
现在应用程序发展一年后,我正在使用Spring Boot 1.5.4
和Hibernate 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
到您的属性文件。