Closed
Description
I have an entity which will registerEvent when I update the field, and MyClassModifyEventHandler.handle()
is expected to be executed upon repository.save()
or repository.saveAll()
@DynamicInsert
@DynamicUpdate
@Entity
public class MyClass extends AbstractAggregateRoot<MyClass> {
@Id private UUID id;
@Column(name = "field")
private String field;
@CreationTimestamp Instant createdAt;
@UpdateTimestamp Instant updatedAt;
@Version Integer version;
public void setField(String field) {
this.field = field;
registerEvent(new MyClassModifyEvent(this));
}
}
@Component
public class MyClassModifyEventHandler {
@EventListener
public void handle(final MyClassModifyEvent persistenceEvent) {
// do something
}
}
I have a method which will query a list of MyClass
and update their respective fields.
@Transactional
public void eventHandlerNotBeingCalled() {
// ..
Window<MyClass> myClasses =
myClassRepo.findFirst20(ScrollPosition.keyset());
for (MyClass myClass : myClasses) {
myClass.setField("newField");
}
myClassRepo.findFirst20.saveAll(myClasses);
// working solution
// myClassRepo.findFirst20.saveAll(myClasses.toList());
}
So with this, the @EventListener
is not working even though the event is registered before saveAll()
. If I calling saveAll
on List<MyClass>
instead (ie myClassRepo.saveAll(myClasses.toList())
), the MyClassModifyEventHandler.handle
will be called. Is this expected behaviour?