Пожалуйста, обратитесь к 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 вызывается только после выполнения фиксации, а не при откате.