将带有 java envers 的审计表移动到新的数据库实例
Posted
技术标签:
【中文标题】将带有 java envers 的审计表移动到新的数据库实例【英文标题】:Moving auditing table with java envers to new database instance 【发布时间】:2020-05-03 11:37:41 【问题描述】:我有一个 mysql 数据库,模式名称为“myschema”。这个模式有表,其中一些表是 审计表。这是我对 java 项目的依赖。
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-envers</artifactId>
<version>5.1.0.Final</version>
</dependency>
现在我想在我的当前数据库上删除这些审计表,并在一个单独的实例上重新添加它们,并带有一个新的分支。
如何做到这一点?任何建议,提前谢谢你
【问题讨论】:
【参考方案1】:AFAIK Envers 不支持使用单独的数据库/DataSource
。似乎有几种方法可以将数据获取到另一个数据库:Oracle Database Link - MySQL Equivalent?
或者,我猜你可以编写一个自定义的DataSource
,根据语句将语句委托给不同的数据源。
检查是否提到了审计表,如果是,则将其发送到审计数据库。
【讨论】:
【参考方案2】:请看Configuration Options:
org.hibernate.envers.default_schema
审计表应该使用的默认模式名称。
org.hibernate.envers.default_catalog
应该用于审计表的默认目录名称。
您应该使用的选项取决于您的数据库。
还有一个错误是,如果您使用 Envers 开箱即用的默认修订实体映射,则在使用这些配置选项时,这些映射将无法正确映射,只有与实体映射相关的表才会正确映射。
为了将REVINFO
表正确映射到适当的架构或目录,需要将自定义修订实体映射与@Table
注释结合使用,以便显式指定架构/目录。请参阅 Revision Log 部分,该部分描述了将自定义 @RevisionEntity
带注释的实体映射与 Envers 一起使用。
【讨论】:
以上是关于将带有 java envers 的审计表移动到新的数据库实例的主要内容,如果未能解决你的问题,请参考以下文章
在 Spring Hibernate java 项目中使用“Envers”审计表