Java 当从属属性更改时,如何在实体上设置modifiedDate
假设JPA实体Java 当从属属性更改时,如何在实体上设置modifiedDate,java,date,jpa,collections,persist,Java,Date,Jpa,Collections,Persist,假设JPA实体Foo。通过添加注释,我可以处理更新createdDate和modifiedDate属性。更改name并持久化Foo后,createdDate将正确更新。但是这不适用于条,它是一个条实体的列表 @Entity class Foo { ... String name; @OneToMany(cascade = CascadeType.PERSIST) List<Bar> bars; Date modifiedDate; Date create
Foo
。通过添加注释,我可以处理更新createdDate
和modifiedDate
属性。更改name
并持久化Foo
后,createdDate
将正确更新。但是这不适用于条
,它是一个条
实体的列表
@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 {
...
}
@实体
福班{
...
字符串名;
@OneToMany(cascade=CascadeType.PERSIST)
列表栏;
日期修改日期;
创建日期;
@预科生
public void updateCreatedDate(){
dateCreated=新日期();
}
@预更新
public void updateModifiedDate(){
lastModified=新日期();
}
...
}
@实体
分类栏{
...
}
如果
bar
中的一项更改并被持久化,是否可以更新Foo
?您可以封装对条列表的每次修改,并在每次修改列表时将实体标记为脏(例如,通过将修改日期设置为另一个值):
public List<Bar> getBars() {
return Collections.unmodifiableList(this.bars);
}
public void addBar(Bar b) {
this.bars.add(b);
this.modifiedDate = new Date(0L);
}
...
public List getbar(){
返回集合.不可修改列表(此.bar);
}
公共无效添加栏(b栏){
本条加上(b);
this.modifiedDate=新日期(0L);
}
...
请注意,这将生成更多查询,因为添加一个bar通常只需要在bar表中插入一个(如果使用联接表,则在联接表中插入一个)。现在,每添加一个条也会导致Foo表中的更新