【发布时间】:2020-09-22 13:57:56
【问题描述】:
我使用 Envers 审核我的数据,有时_MOD 的值不正确。当我在列表中添加一个元素时,它停留在0 而不是1。但它只发生在特定情况下。
我的实体:
@Entity
@Table(name = "PERSONNE")
@Audited(withModifiedFlag = true)
public class PersonEntity {
@Id
@Column(name = "ID_PERSONNE")
private Long id;
@Column(name = "NAME", length = 100)
private String name;
@Audited( withModifiedFlag = true, modifiedColumnName = "SERVICES_MOD")
private Set<PersonneServiceEntity> services = new HashSet<>(); // Entity with attributs, gettters, setters and envers annotations...
@Audited( withModifiedFlag = true, modifiedColumnName = "OPT_INS_MOD")
private Set<OptinEntity> optIns = new HashSet<>();// Entity with attributs, gettters, setters and envers annotations...
// more fields
// + getters, setteurs, equals, tostring
我的服务:
// personFromDB is retrieve via an Id
private void update(PersonEntity personFromRequest, PersonEntity personFromDB) {
personFromDB.setName(personFromRequest.getName());
updateServices(personFromRequest, personFromDB); // add new support to the list
updateOptins(personFromRequest, personFromDB); // add new services to the list
personDao.saveAndFlush(personFromDB);
}
这是神奇的事情:当我更新 name、services 和 optIns 时。我的数据库中的值都是正确的,我的实体是正确的,除了一个 envers 的列:OPT_INS_MOD(OPT_INS_MOD == 0)。
但是,如果我没有更新名称(注释行),那么所有内容都会正确保存,包括所有 _MOD 值(OPT_INS_MOD == 1 和 SERVICES_MOD)。
最后,如果我切换updateSupport(personFromRequest, personFromDB) 和updateServices(personFromRequest, personFromDB),在这种情况下OPT_INS_MOD 是正确的,但不是SERVICES_MOD。
我的猜测是当 Envers 获取所有修改的字段时存在问题。因为这对我来说没有任何意义。
有什么想法吗?我正在使用 Envers 版本 4.3.11.Final
【问题讨论】:
标签: java spring hibernate-envers