【发布时间】:2019-05-29 21:21:33
【问题描述】:
我有一个这样的聚合根:
聚合根:
@NoArgsConstructor
@Aggregate(repository = "positionAggregateRepository")
@AggregateRoot
@XSlf4j
@Data
public class HopAggregate {
@AggregateIdentifier
private String hopId;
private FilteredPosition position;
private LocalDate positionDate;
@AggregateMember
private Security security;
@CommandHandler
public HopAggregate(NewHopCommand cmd) {
log.info("creating new position , {}", cmd.getDateId());
apply(new HopEvent(cmd.getHopId(), cmd.getDateId(), cmd.getFilteredPosition(), cmd.getSecurity(), false));
}
@CommandHandler
public void handle(UpdateHopCommand cmd) {
log.info("creating hop update event {}", cmd);
apply(new HopEvent(this.hopId, this.positionDate, cmd.getFilteredPosition(), this.security, true));
}
@CommandHandler
public void handle(SecurityUpdate cmd) {
log.info("updating security {}", cmd);
apply(new SecurityUpdateEvent(this.hopId, cmd.getFilteredSecurity()));
}
@EventSourcingHandler
public void on(HopEvent evt) {
if (evt.getIsUpdate()) {
log.info("updating position {}", evt);
this.position = evt.getFilteredPosition();
} else {
log.info("adding new position to date {}", evt);
this.hopId = evt.getHopId();
this.positionDate = evt.getDate();
this.position = evt.getFilteredPosition();
this.security= evt.getSecurity();
}
}
@EventSourcingHandler
public void on(SecurityUpdateEvent evt) {
log.info("hop id {}, security update {}", this.hopId, evt.getFilteredSecurity().getSecurityId());
}
}
子实体:
@XSlf4j
@Data
@RequiredArgsConstructor
@NoArgsConstructor
public class IpaSecurity implements Serializable {
@EntityId
@NonNull
private String id;
@NonNull
private FilteredSecurity security;
}
我的问题是,当我像这样推送和更新时:
@EventHandler
public void handleSecurityEvent(SecurityUpdate securityUpdate) {
log.info("got security event {}", securityUpdate);
commandGateway.send(securityUpdate);
}
我的命令是:
@Data
@RequiredArgsConstructor
@NoArgsConstructor
@ToString
public class SecurityUpdate {
@NonNull
@TargetAggregateIdentifier
private String id;
@NonNull
private FilteredSecurity filteredSecurity;
}
我得到聚合根未找到异常:
命令 'com.hb.apps.ipa.events.SecurityUpdate' 导致 org.axonframework.modelling.command.AggregateNotFoundException(在事件存储中找不到聚合)
我不确定如何处理这种情况。我的要求是每个聚合都应该检查它是否包含安全性,然后在发出命令时更新它。我错过了什么?如果您需要有关代码的更多信息,请告诉我。
感谢您的帮助。
【问题讨论】:
-
有没有办法将事件应用于所有聚合?
标签: axon