spring - 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”)被审计并且只审计实际修改的实体?
解决方案
推荐阅读
- python - 有没有更好的方法来整理这些代码?这是具有 4 个 ODE 的 Runge-Kutta 4 阶
- samesite - 如何编辑 samesite=lax 的 setcookie 代码
- swift - UICollectionView/AppDelegate 在跟随视频教程时导致崩溃
- android - 为生产构建 ionic 3 应用程序失败,我不明白为什么?
- sql-server - 在现有的大型表上创建列存储索引的最有效方法?
- java - 如何获取 JTextArea 中特定字符的精确坐标
- android - Firebase,从父母那里得到特定的孩子
- python - 在 Python 中,迭代不能按我的预期工作
- webusb - 通过 WebUSB JavaScript 打开钱箱
- javascript - Webpack 代码拆分会破坏块之间的 instanceof