首页 > 解决方案 > hibernate envers 审计即使没有变化

问题描述

我们正在使用 hibernate envers 来审计实体的变化。
我们有以下两个实体
UserRole

public class UserRole {
    private String id;

    @Audited
    @Column(name = "name")
    private String name;

    @EqualsAndHashCode.Exclude
    @ToString.Exclude
    @ManyToMany(mappedBy = "userRoles", cascade = {
        CascadeType.PERSIST,
        CascadeType.MERGE
    })
    @Audited
    private Set<UserGroup> userGroups;
}


用户组

public class UserGroup {
    private String id;

    @Audited
    @Column(name = "name")
    private String name;

    @EqualsAndHashCode.Exclude
    @ToString.Exclude
    @ManyToMany(cascade = {
        CascadeType.PERSIST,
        CascadeType.MERGE
    })
    @JoinTable(
        name = "role_user_group_mapping",
        joinColumns = {@JoinColumn(name = "user_group_id")},
        inverseJoinColumns = {@JoinColumn(name = "user_role_id")}
    )
    @Audited
    private Set<UserRole> userRoles;

}


以下是场景:
如果我们尝试将角色分配给任何现有用户组,envers 会将已分配给用户组的所有其他角色记录为已修改,即使这些角色没有更改。


例如。假设我们有用户组“Admin User Group”
,并且已经分配了“Role1”和“Role2”。
现在,如果我尝试将新角色“Role3”分配给该组,我将获得对现有角色“Role1”和“Role2”的额外审核,但这些角色没有更改。

审核应仅针对用户组“Admin User Group”,因为新角色已分配给它,而对于“Role3”,因为新用户组已分配给该角色。

如何避免已经存在的角色(“Role1”、“Role2”)被审计并且只审计实际修改的实体?

标签: springhibernatehibernate-envers

解决方案


推荐阅读