java - 在执行删除操作时,少数字段未经过审核,在保留在数据库中时其值为空

标签 java mysql hibernate jboss hibernate-envers

使用Hibernate Envers,在创建操作时审核功能正常工作,数据在主表和审核表中正确填写,但在删除少数字段的条目时其取 null 以下是代码示例:

@Audited
@MappedSuperclass
public abstract class A implements Serializable
{
private static final long   serialVersionUID    = 1L;
@NotNull
private Long                id;
@NotNull
private String              user;   
private Timestamp           time;
}

@Entity
@Audited
public class B extends A
{
private static final long               serialVersionUID    = 1L;

@EmbeddedId
private EmbeddedId  embeddedId;

@ManyToOne
@JoinColumn(name = "CODE")
private Code                    code;
}

@Audited
@Embeddable
public class EmbeddedId implements Serializable
{
private static final long                   serialVersionUID    = 1L;

@ManyToOne
@JoinColumn(name = "C")
private C                       c;

@ManyToOne(optional = false)
@JoinColumns(value =
{ @JoinColumn(name = "C_ID", referencedColumnName = "C_ID"),
        @JoinColumn(name = "D_ID", referencedColumnName = "D_ID") })
private D   d;

}   

@Entity
@Audited
public class Code extends A
{
private static final long   serialVersionUID    = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long                cId;

private String              name;
}

所有类都用 @Audited 进行注释,当删除操作被触发时,B 类数据未得到正确审核。与embeddedId(复合主键)相对应的数据反射(reflect)在审计表中,但其他数据(例如代码,id,用户,时间),即该类的成员变量以及来自继承的数据在审计表中为空。

由于我是 Envers 新手,请提供此问题的详细解决方案。

最佳答案

如果您希望在执行DELETE操作时存储非标识符属性,则必须明确告诉Envers您希望启用此行为,因为默认情况下它不会这样做。

只需将配置org.hibernate.envers.store_data_at_delete切换为true,Envers将在DELETE期间开始捕获和存储非标识符审核属性 数据库操作。

您可以在提供其他 hibernate 配置属性的位置设置此配置。

关于java - 在执行删除操作时,少数字段未经过审核,在保留在数据库中时其值为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43894683/

相关文章:

mysql - Bash:如何轻松编辑 5.4G SQL 转储中的一行

MySQL - 如何求和时间?

mysql - 我试图在 mysql 中创建一个触发器,但不起作用

java - 如何实现一个通用的方法来使用 Hibernate 从数据库中获取数据?

java - 未找到此类 Bean 定义 - 异常

java - 在模型类中使用 javafx.beans 属性

java - Eclipse VisualSVN 错误 svn E175002 : java. lang.NumberFormatException

java - 如何将 lambda 表达式赋值给变量?

java - HK2 与 Jersey 2 和 Apache Shiro 的依赖注入(inject)

java - 提取文件名的正则表达式?