如何将对象映射到物化视图并保留<prop key="hibernate.hbm2ddl.auto">validate</prop>
?
启动webapp时,我在启动时遇到此异常:
Caused by: org.hibernate.HibernateException: Missing table: subjects_lp
at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1302)
at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:155)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:512)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1797)
...
根据消息来源,看起来hibernate只会询问类型&#34; VIEW&#34;和&#34;表&#34;在DatabaseMetadata#getTableMetadata中,而postgresql将其存储为&#34; MATERIALIZED VIEW&#34; (用普通的jdbc检查)。
令人惊讶的是,我无法在谷歌中找到有关此错误的一些信息。有没有办法在启动时保持hibernate验证,也许有办法保持一个表/实体未经验证?
Hibernate版本:4.2.12。最终版本 Postgresql驱动程序:9.3-1101-jdbc41
实体没有任何特定的注释,只有
@javax.persistence.Entity
@javax.persistence.Table(name = "table_name", schema = "schema")
答案 0 :(得分:3)
这不是驱动程序问题,而是一个hibernate错误。
答案 1 :(得分:0)
对于那些使用spring-boot-starter-data-jpa并在其application.yml文件中使用ddl-auto: validate
的用户,您需要在属性中添加hibernate.hbm2dll.extra_physical_table_types: "MATERIALIZED VIEW"
:
spring:
datasource:
~~~
jpa:
hibernate:
ddl-auto: validate
~~~
properties:
hibernate:
~~~
hbm2dll:
extra_physical_table_types: "MATERIALIZED VIEW"
之所以提及这一点,是因为我花了很多时间才能将其放置在正确的位置。