Versioning
EntityVersionContext<Long> versionContext =
EntityVersionContext.AutoIncrementingLong();
Person john = PersonCreator.New()
.addLayer(versionContext)
.firstName("John")
.lastName("Doe")
.create();

Last updated
EntityVersionContext<Long> versionContext =
EntityVersionContext.AutoIncrementingLong();
Person john = PersonCreator.New()
.addLayer(versionContext)
.firstName("John")
.lastName("Doe")
.create();

Last updated
PersonUpdater.setLastName(john, "Smith");
PersonUpdater.setLastName(john, "Archer");
PersonUpdater.setLastName(john, "Bennett");john.lastName() // now returns "Bennett"versionContext.versions(john).get(1L); // -> "John Smith"EntityVersionCleaner<Long> versionCleaner =
EntityVersionCleaner.AmountPreserving(10);
EntityVersionContext<Long> versionContext =
EntityVersionContext.AutoIncrementingLong(cleaner);EntityVersionContext<Long> systemTimeContext =
EntityVersionContext.AutoIncrementingSystemTimeMillis();
EntityVersionContext<Long> nanoTimeContext =
EntityVersionContext.AutoIncrementingSystemNanoTime();
EntityVersionContext<Instant> instantContext =
EntityVersionContext.AutoIncrementingInstant();EntityVersionCleaner<Instant> cleaner =
EntityVersionCleaner.AgePreservingInstant(Duration.of(1, ChronoUnit.YEARS));
EntityVersionContext<Instant> context =
EntityVersionContext.AutoIncrementingInstant(cleaner);EntityVersionContext.Mutable<String> versionContext =
EntityVersionContext.Mutable();
versionContext.currentVersion("rev-1");
Person john = PersonCreator.New()
.addLayer(versionContext)
.firstName("John")
.lastName("Doe")
.create();
versionContext.currentVersion("rev-2");
PersonUpdater.setLastName(john, "Smith");
versionContext.currentVersion("rev-3");
PersonUpdater.setLastName(john, "Archer");
versionContext.currentVersion("rev-4");
PersonUpdater.setLastName(john, "Bennett");