Для сохранения снимка некоторого графа сущностей достаточно вызвать метод EntitySnapshotService.createSnapshot()
и передать ему основную сущность графа и представление, описывающее граф. Снимок создается по загруженной сущности, никаких обращений к базе данных не производится, поэтому снимок
в результате содержит не больше полей, чем представление, с которым была загружена основная сущность.
Граф Java объектов преобразуется в XML и сохраняется в базе данных вместе со ссылкой на основную сущность в таблице SYS_ENTITY_SNAPSHOT, соответствующей сущности EntitySnapshot
.
Как правило, снимки требуется сохранять после коммита экрана редактирования. Для этого можно переопределить метод postCommit()
контроллера экрана, например:
public class CustomerEditor extends AbstractEditor<Customer> { @Inject protected Datasource<Customer> customerDs; @Inject protected EntitySnapshotService entitySnapshotService; ... @Override protected boolean postCommit(boolean committed, boolean close) { if (committed) { entitySnapshotService.createSnapshot(customerDs.getItem(), customerDs.getView()); } return super.postCommit(committed, close); } }