我正在尝试扩展DefaultRevisionEntity以便将用户名添加到当前的修订版实体中。但是,它不只是添加新字段,而是创建一个全新的表。代码如下
AuditRevisionEntity
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;
}
}
AuditRevisionListener
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;
}
产生
答案 0 :(得分:0)
您的自定义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
中找到答案 1 :(得分:0)
我相信我已通过将表添加到指向主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;
}
}