【发布时间】:2019-12-19 03:30:48
【问题描述】:
级联类型似乎不适用于 axon 使用的实体管理器。如果我使用 CascadeType.Persist,我第二次尝试使用同一个子对象创建一个对象时,会出现重复键约束错误。如果我使用 CascadeType.Merge,如果数据库中不存在条目,它将无法工作。
尝试使用不同的 CascadeTypes,以及休眠的 @Cascade 注释,但无济于事。还尝试将@AggregateMember 用于子级,但子级实体似乎没有在父级之前保存。
@Bean
Repository<OfficialRecordEntity> axonOfficialRecordRepository(EntityManagerProvider emp, ParameterResolverFactory parameterResolverFactory, EventBus eventBus) {
return GenericJpaRepository.builder(OfficialRecordEntity.class)
.parameterResolverFactory(parameterResolverFactory)
.entityManagerProvider(emp)
.eventBus(eventBus)
.build();
}
@Aggregate
@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = {"id"}, callSuper = false)
@Builder
public class OfficialRecordEntity {
@Id
@AggregateIdentifier
private String id;
//many other fields
@OneToMany(cascade = CascadeType.PERSIST)
private List<Accessory> accessories;
@ManyToOne(cascade = CascadeType.PERSIST)
private ExpeditionType expeditionType;
//many other commandhandlers/eventhandlers
@CommandHandler
public OfficialRecordEntity(CreateOfficialRecordCommand command) {
apply(new CreateOfficialRecordEvent(command.getId(), command.getOfficialRecordDTO()));
}
@EventSourcingHandler
public void on(final CreateOfficialRecordEvent event) {
//...some field initializations
}
}
Accessory 和 ExpeditionType 也是实体。
我知道我们并没有完全使用轴突框架,但此时我只是试图在 OfficialRecordEntity 之前正确保存所有子实体 - 期望级联类型应该足够但由于对于 axon 的实体管理器提供者来说,它似乎不是那样工作的。
【问题讨论】:
标签: java spring hibernate spring-boot axon