public Cargo create(String originUnLocode, String destinationUnLocode, Date arrivalDeadline) { TrackingId trackingId = cargoRepository.nextTrackingId(); Location origin = locationRepository.findLocationByUnLocode(originUnLocode); Location destination = locationRepository.findLocationByUnLocode(destinationUnLocode); RouteSpecification routeSpecification = routeSpecificationFactory.create(origin, destination, arrivalDeadline); UnitOfWork uow = uowf.currentUnitOfWork(); EntityBuilder<Cargo> builder = uow.newEntityBuilder(Cargo.class, trackingId.id().get()); Cargo.State instanceState = builder.instanceFor(Cargo.State.class); instanceState.routeSpecification().set(routeSpecification); instanceState.origin().set(origin); Cargo cargo = builder.newInstance(); logger.info("Booked new cargo with tracking id " + cargo.trackingId().id().get()); return cargo; }