У меня есть следующий (Axon) агрегат:
@Aggregate
@NoArgsConstructor
public class Car{
@AggregateIdentifier
private String id;
@CommandHandler
public Car(CreateCar command){
apply( new CarCreated(command.getId()) );
}
@EventSourcingHandler
public void carCreated(CarCreated event) {
this.id = event.getId();
}
}
И я могу создать машину, отправив команду CreateCar
с определенным идентификатором, что вызовет событие CarCreated
. Это великолепно.
Однако, если я отправлю другую команду CreateCar
с тем же идентификатором, команда не может быть проверена агрегатом (то, что данный идентификатор уже существует). Впоследствии он просто вызовет новое событие CarCreated
. Что является ложью.
Как лучше всего убедиться, что команда CreateCar
не работает, если автомобиль уже существует?
Естественно, я мог бы сначала проверить репозиторий, но это не предотвратит состояние гонки...