【问题标题】:Hibernate Envers wrong modified flag on listHibernate Envers 错误修改了列表中的标志
【发布时间】: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);
}

这是神奇的事情:当我更新 nameservicesoptIns 时。我的数据库中的值都是正确的,我的实体是正确的,除了一个 envers 的列OPT_INS_MODOPT_INS_MOD == 0)。 但是,如果我没有更新名称(注释行),那么所有内容都会正确保存,包括所有 _MOD 值(OPT_INS_MOD == 1SERVICES_MOD)。 最后,如果我切换updateSupport(personFromRequest, personFromDB)updateServices(personFromRequest, personFromDB),在这种情况下OPT_INS_MOD 是正确的,但不是SERVICES_MOD

我的猜测是当 Envers 获取所有修改的字段时存在问题。因为这对我来说没有任何意义。

有什么想法吗?我正在使用 Envers 版本 4.3.11.Final

【问题讨论】:

    标签: java spring hibernate-envers


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      • 2019-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多