В приложении Java Spring Rest у меня есть следующие доменные объекты:
@Entity
@Table(name = "order")
public class Order implements Serializable {
....
@OneToMany(mappedBy = "order", orphanRemoval = true)
private Set<PurchaseOrderItem> purchaseOrderItems = new HashSet<>();
@NotNull
@Column(name = "total_net", precision = 10, scale = 2, nullable = false)
private BigDecimal totalNet;
}
@Entity
@Table(name = "order_item")
public class OrderItem implements Serializable {
@ManyToOne(optional = false)
@NotNull
@JsonIgnoreProperties("")
@JsonIgnore
private Order order;
@NotNull
@Column(name = "total_net", precision = 10, scale = 2, nullable = false)
private BigDecimal totalNet;
}
В объекте заказа есть агрегированный столбец, который должен содержать сумму всей totalNet для orderItem, а также при добавлении или удалении orderItem totalNet заказадолжно быть обновлено.
Каков наилучший способ добиться этого?
Текущая реализация осуществляется с помощью таких служб, как
@Service
@Transactional
public class OrderItemService {
public OrderItemDTO save(OrderItemDTO orderItemDTO) {
orderItem orderItem = mapper.toEntity(orderItemDTO);
orderItem = orderItemRepository.save(orderItem);
if (orderItemDTO.getOrderId() != null) {
OrderDTO orderResult = orderService.findOne( orderItemDTO.getOrderId()).get();
orderService.save(orderResult);
//total is calculated in save method of parent
}
return mapper.toDto(orderItem);
}
}
Это похоже на неправильный поток ... Использование EntityEventListeners с @PostUpdate@PostRemove будет правильно здесь?