Hibernate Envers 列表上的错误修改标志

问题描述 投票:0回答:2

我使用 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
2个回答
0
投票

我不确定这是否对您有帮助,因为它听起来不像是同一个问题,但我注意到修改后的标志和集合有一个奇怪之处。

我从前端返回我的实体,从 JSON 转换回 POJO。为了避免 Hibernate 出现瞬态对象错误,我需要重置 @Id 字段中的值(它从未发送到 FE)。这适用于 1-1 个实体。

关于集合,我发现如果我创建集合类的新实例并用旧集合中的刷新实体填充它,然后将该新集合分配给旧属性,则修改标志设置为 true。

但是,如果我用刷新的实体填充新集合,clear() 旧集合,然后将所有项目添加到新集合中,除非对集合进行实际更改,否则修改标志将为 false。


0
投票

你找到解决这个问题的方法了吗? 我遇到了同样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.