【问题标题】:How to use "org.hibernate.envers.default_schema" in custom RevisionEntity如何在自定义 RevisionEntity 中使用“org.hibernate.envers.default_schema”
【发布时间】:2017-04-24 12:49:35
【问题描述】:

我正在使用 hibernate-envers 4.2.8 并创建了自己的 CustomRevisionEntity 来添加进行此类更改的用户

@Entity
@RevisionEntity(CustomRevisionEntityListener.class)
@Table(name = "REVINFO")
public class CustomRevisionEntity {
...
}

我通过添加更改了审计表的架构

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

到我的应用程序上下文。

审计表都是在架构 myschema_audit 中创建的,但不幸的是 REVINFO 表仍然是在默认架构 myschema 中创建的。

是因为我的@Table 注释吗?我必须添加schema 属性吗?如果是这样,我如何在该注释中使用相应的休眠属性?

我尝试省略 @Table 注释,但 REVINFO 表根本没有创建。

如何实现REVINFO 表是在myschema_audit 中创建的?

【问题讨论】:

    标签: hibernate hibernate-envers


    【解决方案1】:

    如果您省略 @Table 注释,则在不存在 @Table 注释时,它可能会根据 ORM 使用的命名策略创建为 CustomRevisionEntity 或类似名称。

    通过指定@Table(name = "REVINFO", schema = "myschema_audit"),应将实体正确放置在正确的架构中,所需名称为REVINFO。

    HTH。

    【讨论】:

    • 关于省略 @Table 注释是对的。我不想指定硬编码的架构,而是想使用相应的休眠属性,因为它的值会根据 Maven 配置文件而变化。知道该怎么做吗?
    • Hibernate 中没有自动化的方式来做到这一点,因为自定义修订实体在技术上只是一个 ORM 实体,因此它遵循 ORM 的规则。在这种情况下,Envers 只是与该实体相关联,并且知道如何在审计事件期间向其插入行。我认为您可以做的是在编译之前应用 Maven 资源替换传递来完成此操作。然而,这当然也有其自身的缺点和担忧。
    • 我可以研究的一件事是,如果用户使用自定义修订实体并设置其架构,是否可以在 Envers 传递期间更改修订实体的架构/catalog 遵循 Envers 规则而不是 ORM 规则。
    • 您有更多相关信息吗?我对多个模式和一个没有进入正确模式的自定义审计实体有同样的问题。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    相关资源
    最近更新 更多