假设JPA实体Foo
。通过添加注释,我可以处理createdDate
和modifiedDate
属性的更新。更改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表中的更新。