Skip to content

@DomainEvents method not being called on saveAll with Window<> #2938

Closed
@jiaheng

Description

@jiaheng

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?

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions