2 回答
TA贡献1818条经验 获得超8个赞
对于其他读者,让我分享您在存储库中创建的聚合:
@Aggregate
public class OrderAggregate {
public OrderAggregate(OrderRepositoryData orderRepositoryData) {
this.orderRepositoryData = orderRepositoryData;
}
@AggregateIdentifier
private Integer orderId;
private OrderRepositoryData orderRepositoryData;
@CommandHandler
public void handle(CreateOrderCommand command) {
apply(new OrderCreatedEvent(command.getOrderId()));
}
@EventSourcingHandler
public void on(OrderCreatedEvent event) {
this.orderId=event.getOrderId();
Order order=new Order("Order New");
orderRepositoryData.save(order);
}
protected OrderAggregate() {
// Required by Axon to build a default Aggregate prior to Event Sourcing
}
}
您可以从该聚合中完全删除几项内容,它们是:
这
OrderRepositoryData
设置的
OrderAggregate
构造函数OrderRepositoryData
Order
在带@EventSourcingHandler
注释的函数中手动保存
您在这里所做的是将命令模型对决策的关注与Order
为查询模型创建可查询对象相结合。最好从聚合(示例中的命令模型)中完全删除此逻辑并将其移至事件处理组件。
然而,这不是AggregateNotFoundException
你收到的罪魁祸首。您错过的是使CreateOrderCommand
命令处理程序成为构造函数。
CreateOrderCommand
顾名思义,它将创建一个订单。因此,它应该由构造函数而不是常规方法来处理。所以,而不是这个:
@CommandHandler
public *void* handle(CreateOrderCommand command) {
apply(new OrderCreatedEvent(command.getOrderId()));
}
你应该这样做:
@CommandHandler
public OrderAggregate(CreateOrderCommand command) {
apply(new OrderCreatedEvent(command.getOrderId()));
}
TA贡献1890条经验 获得超9个赞
在事件存储中找不到聚合
此异常的主要原因是,当轴突尝试保存聚合时,它应该首先创建聚合。
@CommandHandler
public OrderAggregate(CreateOrderCommand command) {
apply(new OrderCreatedEvent(command.getOrderId()));
}
也以这种方式你
私有 OrderRepositoryData orderRepositoryData;
不会被初始化,所以也自动装配了 orderRepositoryData。
@Autowired
private OrderRepositoryData orderRepositoryData;
对于连续事件,您应该使用相同的OrderId,否则它也会抛出
handleThrowable(java.lang.Throwable,org.springframework.web.context.request.WebRequest) org.axonframework.modelling.command.AggregateNotFoundException: 在 org.axonframework.eventsourcing.EventSourcingRepository.doLoadWithLock( EventSourcingRepository.java:122)
添加回答
举报