【问题标题】:Hibernate Envers unable to extend DefaultRevisionEntityHibernate Envers 无法扩展 DefaultRevisionEntity
【发布时间】:2019-03-30 17:58:37
【问题描述】:

我正在尝试扩展 DefaultRevisionEntity 以便将用户名添加到当前修订实体。但是,它不是简单地添加新字段,而是创建一个全新的表。代码如下

审计修订实体

package com.example.demo;

import org.hibernate.envers.DefaultRevisionEntity;

import javax.persistence.Entity;
import javax.persistence.EntityListeners;

@Entity
@EntityListeners(AuditRevisionListener.class)
public class AuditRevisionEntity extends DefaultRevisionEntity {
    private String user;

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }
}

审计修订监听器

package com.example.demo;

import org.hibernate.envers.RevisionListener;

public class AuditRevisionListener implements RevisionListener {

    @Override
    public void newRevision(Object revisionEntity) {
        AuditRevisionEntity rev = (AuditRevisionEntity) revisionEntity;
        rev.setUser("MYUSER");
    }
}

用户

package com.example.demo;

import org.hibernate.envers.Audited;
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;

@Entity
@Audited
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @NotBlank()
    @Size(min = 1, max = 100)
    @Column(name = "email")
    private String email;

    @NotBlank()
    @Size(min = 1, max = 100)
    @Column(name = "password")
    private String password;

}

导致

【问题讨论】:

  • 编译组:'org.hibernate',名称:'hibernate-envers',版本:'5.3.7.Final'

标签: spring hibernate spring-mvc spring-boot spring-data


【解决方案1】:

您的自定义 RevisionEntity 缺少必需的 @RevisionEntity 注释。

package com.example.demo;

import org.hibernate.envers.DefaultRevisionEntity;

import javax.persistence.Entity;
import javax.persistence.EntityListeners;

@Entity
@RevisionEntity( AuditRevisionListener.class )
public class AuditRevisionEntity extends DefaultRevisionEntity {
    private String user;

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }
}

更多信息和代码示例可以在Envers documentation中找到

【讨论】:

  • 您好,感谢您的帮助,但它仍在添加新表,而不仅仅是添加新字段
【解决方案2】:

我相信我已经通过将表添加到指向主 revinfo 表的自定义实体来解决此问题

@Entity
@RevisionEntity( AuditRevisionListener.class )
@Table(name = "revinfo")
public class AuditRevisionEntity extends DefaultRevisionEntity {
    private String user;

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }
}

【讨论】:

    猜你喜欢
    • 2021-06-07
    • 2020-12-03
    • 2020-01-26
    • 1970-01-01
    • 2017-10-22
    • 2013-04-23
    • 2017-02-24
    • 1970-01-01
    • 2021-11-17
    相关资源
    最近更新 更多