Как установитьifiedDate для сущности при изменении зависимого свойства - PullRequest
0 голосов
/ 01 сентября 2011

Предположим, 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 изменяется и сохраняется?

1 Ответ

1 голос
/ 01 сентября 2011

Вы можете инкапсулировать каждую модификацию в список столбцов и пометить сущность как грязную (например, установив дату модификации в другое значение) при каждом изменении списка:

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

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

...

Обратите внимание, что это будет генерировать больше запросов, потому что для добавления панели обычно требуется только одна вставка в таблицу столбцов (и один в таблицу соединений, если используется таблица соединений). Теперь каждое добавление бара также будет вызывать обновление в таблице Foo.

...