【问题标题】:Hibernate Envers shared domain objects on different schemas with and without enversHibernate Envers 在有和没有 envers 的不同模式上共享域对象
【发布时间】:2018-05-09 09:13:03
【问题描述】:

我们目前仍在使用 Hibernate 4 和 Hibernate Envers。我们的应用程序使用两个不同的数据库模式,共享相同的域对象。其中一种模式 (schema1) 正在使用 envers 表 (_audrevinfo),其他模式 (schema2) 不是。在一些业务案例中,值将从schema1 复制到schema2 中的相同表中

这意味着 envers 表 revinfo 存在于 schema1 中,但不存在于 schema2 中。不知何故,Hibernate 4 可以正常工作这么长时间。我们目前正在将我们的应用程序升级到更新的依赖项,作为第一步,我从4.3.11.Final 升级到5.0.12.Final 并面临这个问题,即schema2 上缺少休眠抱怨表revinfo

Caused by: org.postgresql.util.PSQLException: ERROR: relation "schema2.revinfo" does not exist
Position: 13
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2182)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1911)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:173)
    at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:622)
    at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:472)
    at org.postgresql.jdbc.PgStatement.executeUpdate(PgStatement.java:429)
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:384)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:204)

【问题讨论】:

  • 您是指定org.hibernate.envers.default_schema 还是org.hibernate.envers.default_catalog
  • 嗨,Brian,没有定义 default_schemadefaut_catalog。为了更清楚,schema1 应该使用 envers,schema2 不是。我现在尝试用default_schema 定义schema1,但随后它抱怨revinfo_pkey 中的唯一约束。我假设现在两个模式不使用 schema1 进行 envers 条目。 schema2的实体管理器已经配置了hibernate.listeners.envers.autoRegister=false,目前我也在玩hibernate.integration.envers.enabled

标签: hibernate schema hibernate-envers


【解决方案1】:

我现在所做的,它似乎有效。 schema2已经配置好了

<prop key="hibernate.listeners.envers.autoRegister">false</prop>

我在那里添加了

<prop key="hibernate.integration.envers.enabled">false</prop>

不是必须的,但要确保我在 EntityManager schema1also 中添加:

<prop key="org.hibernate.envers.default_schema">managed_configuration</prop>

我还不能 100% 确定副作用。我会回来的。

【讨论】:

  • 到目前为止,我们的 Jenkins Jobs 工作正常。到目前为止,我们似乎成功升级到 5.0。
  • 您应该只需要指定org.hibernate.envers.default_schema 属性。其他人应该对你的情况完全没有影响。
  • 感谢您的回复。关键是,schema1 上的一个事务管理器应该使用 envers,因此设置了 *.default_schemaschema2 上的另一个事务管理器不应该使用 envers,但两者都使用 hibernate-envers 注释共享相同的域类。这就是它被禁用的原因。
猜你喜欢
  • 1970-01-01
  • 2011-09-01
  • 2012-12-05
  • 2016-11-15
  • 1970-01-01
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
相关资源
最近更新 更多