Handling Changes Before Commit has next code that throw IllegalStateException: No results
on Order deleting.
@Component
public class OrderLineEventListener {
@Autowired
private DataManager dataManager;
@EventListener
void onOrderLineChangedBeforeCommit(EntityChangedEvent<OrderLine> event) {
Order order;
if (event.getType() == EntityChangedEvent.Type.DELETED) {
Id<Order> orderId = event.getChanges().getOldReferenceId("order");
order = dataManager.load(orderId).one();
} else {
OrderLine orderLine = dataManager.load(event.getEntityId()).one();
order = orderLine.getOrder();
}
BigDecimal amount = order.getLines().stream()
.map(line -> line.getProduct().getPrice().multiply(
BigDecimal.valueOf(line.getQuantity()))
)
.reduce(BigDecimal.ZERO, BigDecimal::add);
order.setAmount(amount);
dataManager.save(order);
}
}
public class Order {
// ...
@OnDelete(DeletePolicy.CASCADE)
@Composition
@OneToMany(mappedBy = "order")
private List<OrderLine> lines;