在 postgresql 9.3 中验证映射到 MATERIALIZED VIEW 时的 HibernateExcept



如何将对象映射到物化视图并保持<prop key="hibernate.hbm2ddl.auto">validate</prop>

启动

网络应用程序时,我在启动时收到此异常:

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) ...

根据消息来源,它看起来像休眠只要求DatabaseMetadata#getTableMetadata中的"VIEW"和"TABLE"类型,而postgresql则像"MATERIALIZED VIEW"一样存储它(用普通jdbc检查)。

令人惊讶的是,我在谷歌中找不到有关此错误的一些信息。有没有办法在启动时保持休眠验证,也许有办法让一个表/实体保持未验证?

休眠版本:4.2.12.最终版
Postgresql 驱动程序:9.3-1101-jdbc41

实体没有任何特定的注释,只有

@javax.persistence.Entity @javax.persistence.Table(name = "table_name", schema = "schema")

这不是驱动程序问题,而是休眠错误。

查看此错误https://hibernate.atlassian.net/browse/HHH-9602

对于那些使用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"

我之所以提到这一点,是因为我多次尝试才把它放在正确的位置。

最新更新