Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当从属属性更改时,如何在实体上设置modifiedDate_Java_Date_Jpa_Collections_Persist - Fatal编程技术网

Java 当从属属性更改时,如何在实体上设置modifiedDate

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

假设JPA实体
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表中的更新