lor*_*eru 3 java hibernate jpa spring-data-jpa
在更新另一个相关实体后,我需要对实体执行更新。
我有两个实体:OrderEntity和CustomerOrderEntity,关系为 1:N。两者都有一个status领域。OrderEntitystatus 取决于所有孩子的 status 字段。因此,如果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.
}
Run Code Online (Sandbox Code Playgroud)
监听器被注解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
}
Run Code Online (Sandbox Code Playgroud)
请注意,更新的实体是CustomerOrderEntity并且我想更新 OrderEntity.
我认为它不适用于其他实体。JPA 规范说明如下:
通常,可移植应用程序的生命周期方法不应调用 EntityManager 或查询操作、访问其他实体实例或修改同一持久性上下文中的关系。生命周期回调方法可以修改调用它的实体的非关系状态。
| 归档时间: |
|
| 查看次数: |
850 次 |
| 最近记录: |