假设JPA实体Foo。通过添加注释,我可以处理createdDatemodifiedDate属性的更新。更改name并保留Foo后,createdDate会正确更新。但这不适用于bars,后者是Bar实体的列表

@Entity
class Foo {
  ...

  String name;

  @OneToMany(cascade = CascadeType.PERSIST)
  List<Bar> bars;

  Date modifiedDate;
  Date createdDate;

  @PrePersist
  public void updateCreatedDate() {
    dateCreated = new Date();
  }

  @PreUpdate
  public void updateModifiedDate() {
    lastModified = new Date();
  }

  ...
}

@Entity
class Bar {
  ...
}


如果Foo中的一项更改并保留,是否可以更新bars

最佳答案

您可能会封装对条形列表的所有修改,并在每次修改列表时将实体标记为脏(例如,通过将修改日期设置为另一个值):

public List<Bar> getBars() {
    return Collections.unmodifiableList(this.bars);
}

public void addBar(Bar b) {
    this.bars.add(b);
    this.modifiedDate = new Date(0L);
}

...


请注意,这将产生更多查询,因为添加条通常只需要在条表中插入一个(如果使用联接表,则在联接表中只需一个)。现在,每个小节的添加也将导致Foo表中的更新。

10-08 20:08