0

假设 JPA-Entity Foo。通过添加注释,我可以处理更新createdDatemodifiedDate属性。更改name和持久后FoocreatedDate正确更新。但这不适用于实体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更改并保持不变,是否可以更新?

4

1 回答 1

1

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

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

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

...

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

于 2011-09-01T16:42:33.747 回答