【发布时间】:2020-01-10 13:18:41
【问题描述】:
在另一个相关实体更新后,我需要对一个实体执行更新。
我有两个实体:OrderEntity 和 CustomerOrderEntity,关系为 1:N。
两者都有一个status 字段。 OrderEntity 状态取决于所有孩子的状态字段。所以,如果有一个CustomerOrderEntity被更新,我需要重新计算OrderEntity的新状态并持久化/更新它。
我已经实现了一个监听器:
public class CustomerOrderEntityEnventHandler {
private OrderService orderService;
@PostUpdate
public void handleAfterSave(CustomerOrderEntity customerOrder) {
OrderEntity order = customerOrder.getOrder();
OrderStatus newStatus = calculateNewStatus(order);
order.setStatus(newStatus);
}
//other methods and DI handler for orderService. The injection is fine.
}
侦听器在CustomerOrderEntity 中进行了注释,并且被正确调用。但是,该过程完成后,OrderEntity 仍保持旧状态,即使以正确的新状态调用 orderRepository.save()。
我希望 orderEntity 能够更新为新状态。
更新:
我将实现更改为使用PostUpdateEventListener。它正在被正确调用,但是,“其他”实体仍未更新。
public class CustomerOrderEntityUpdateEnventListener implements PostUpdateEventListener {
@Override
public void onPostUpdate(PostUpdateEvent event) {
if (event.getEntity() instanceof CustomerOrderEntity) {
Session session = event.getSession();
CustomerOrderEntity customerOrder = (CustomerOrderEntity) event.getEntity();
OrderEntity order = customerOrder.getOrder();
OrderStatus newStatus = calculateNewStatus(order);
order.setStatus(newStatus);
session.saveOrUpdate(order);
}
}
//other methods
}
注意更新的实体是CustomerOrderEntity,我要更新OrderEntity。
【问题讨论】:
-
这可能无法回答您的问题,但以上正是发明聚合根的原因。
标签: java hibernate jpa spring-data-jpa