@DomainEvent публикует событие даже в случае отката - PullRequest
0 голосов
/ 05 апреля 2019

Пожалуйста, обратитесь к https://docs.spring.io/spring-data/data-mongo/docs/current/reference/html/#core.domain-events

DomainEvent публикуется всякий раз, когда repository.save () вызывается с использованием аннотированного метода @DomainEvent в aggregateRoot (entity).,Существует требование, чтобы событие не вызывалось в случае отката транзакционного метода, т.е. метод, определенный @DomainEvent, вызывается только в том случае, если фиксация выполняется не сразу в repository.save ()

Как это можно сделатьбыть достигнутым?

код

@Data
@Entity
public class Invoices implements Serializable {

    private static final Long serialVersionUID = 1L;

    @Id
    private String invoiceId;

    private String purchaseOrderId;

    @Enumerated(EnumType.STRING)
    private InvoiceStatus status;

    private String invoiceUrl;

    private String merchantName;

    private BigDecimal amount;

    private Timestamp invoiceDate;

    @DomainEvents
    void domainEvent()
    {
        ObjectMapper mapper = new ObjectMapper();
        String jsonString = null;
        try {
            jsonString = mapper.writeValueAsString(this);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        System.out.println(jsonString);
    }

}

//Transactional service Method
   @Transactional
    public void createInvoice(InvoiceDTO invoiceDTO) {
        Invoices invoice = buildInvoicesEntity(invoiceDTO);
        //this is duplicate should result in rollback
        Invoices invoice2 = buildInvoicesEntity(invoiceDTO);
        invoicesRepository.save(invoice);
        invoicesRepository.save(invoice2);
    }

По очевидной причине вышеприведенный код выполняет откат без вставки строки.Но метод domainEvent () вызывается дважды.

Существует ли способ, когда domainEvent вызывается только после выполнения фиксации, а не при откате.

...