java - 在 Spring Hibernate java 项目中使用 "Envers"审计表

标签 java spring hibernate jpa hibernate-envers

我们需要使用 envers 来审计现有的表。我们没有hibernate.xml,而不是我们使用application-context.xml。我们正在通过“liquibase-changeset”创建模式,那么我如何通过@Entity 和@Audited 等注释创建。

我该如何解决这个问题?

我已经添加了 hibernate 配置喜欢

<property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
                <prop key="hibernate.ejb.event.post-insert">org.hibernate.ejb.event.EJB3PostInsertEventListener,org.hibernate.envers.event.AuditEventListener</prop>
                <prop key="hibernate.ejb.event.post-update">org.hibernate.ejb.event.EJB3PostUpdateEventListener,org.hibernate.envers.event.AuditEventListener</prop>
                <prop key="hibernate.ejb.event.post-delete">org.hibernate.ejb.event.EJB3PostDeleteEventListener,org.hibernate.envers.event.AuditEventListener</prop>
                <prop key="hibernate.ejb.event.pre-collection-update">org.hibernate.envers.event.AuditEventListener</prop>
                <!-- <prop key="hibernate.ejb.event.pre-collection-remove">org.hibernate.envers.event.AuditEventListener</prop>
                <prop key="hibernate.ejb.event.post-collection-recreate">org.hibernate.envers.event.AuditEventListener</prop> -->
                <prop key="org.hibernate.envers.revision_field_name">REV</prop>
                <prop key="org.hibernate.envers.revision_type_field_name">REVTYPE</prop>
                <prop key="org.hibernate.envers.auditTablePrefix"></prop>
                <prop key="org.hibernate.envers.auditTableSuffix">_HISTORY</prop>
                <prop key="hibernate.hbm2ddl.auto">create</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>

在我的域类中添加了@Audited 注释

@Entity
@Audited
@Table(name="user")
public class User implements Serializable {

但是这个配置删除了我现有的表

例如

Mydatabase
-----------

user
product
order_details
user_role
login

我的数据库中有 5 个表。运行我的应用程序后,它显示 3 个表。它不是创建“审计”表,而是删除现有表。

 Mydatabase
  -----------

  user
  product
  order_details

如何在不触及现有表的情况下创建审计(_HISTORY)表???

最佳答案

在 Liquibase 变更集中定义审计表定义,就像对任何其他表一样。

跳过 spring-hibernate ocnfiguration 中的 hibernate.hbm2ddl.auto 属性。这将指示 hibernate 不对架构做任何事情。

保持其余配置不变,这应该可以工作。

只需确保架构和配置中的审计表名称匹配即可。

链接到文档,详细说明如果架构是 generated,它是如何完成的使用 Ant

关于java - 在 Spring Hibernate java 项目中使用 "Envers"审计表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27981361/

相关文章:

java - 使用 Java api 按日期搜索 Lotus Notes

java - ZonedDateTime 与 MongoDB

java - 如何在我的 Spring WebFlow 项目中向这个 hibernate 调用添加排序

java - 在 HQL NOT IN 子句中指定列表参数

java - 我不明白为什么 Hibernate 创建一个带有两个连接的查询

Java - 线程计算速度更慢

java - 显示来自 MSG 文件的邮件

java - 依赖注入(inject)是如何工作的?

java - 如何覆盖application.properties文件中spring boot starter的默认属性?

java - Hibernate基础程序中的org.hibernate.HibernateException