java - 从持久化实体 JPA 中删除列表的对象
问题描述
我有两个具有一对多关系的实体Order和Item 。
订单.java
@Id
@Column(name="id")
private Long id;
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Item> items;
项目.java
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "order_id", referencedColumnName = "id")
private Order order;
在更新流程期间,用户可以向订单添加或删除项目。我正在使用 spring boot crud 存储库来更新订单,如下所示。OrderRequest 是更新流的请求 json。我已经编写了代码来实现它。但是代码肯定是一团糟。如何改进此代码。有什么建议么?
Optional<Order> orderFromDb = orderRepo.findById(id);
if(CollectionUtils.isNotEmpty(orderRequest.getItems()))
{
// if there are less items in update request than database
if (orderRequest.getItems().size() < orderFromDb.getItems().size()) {
Set<Long> itemIds = orderRequest.getItems().stream().map(id -> id.getId()).collect(Collectors.toSet());
for (ItemRequest itemRequest : orderRequest.getItems()) {
Iterator<Item> item = orderFromDb.getItems().iterator();
Item i;
while (item.hasNext()) {
i = item.next();
if (!itemIds.contains(i.getId())) {
item.remove();
continue;
}
if (i.getId() == itemRequest.getId()) {
i.setName(itemRequest.getName());
}
}
}
} else {
// if there are more or same items in update request and database
for (ItemRequest itemRequest : orderRequest.getItems()) {
// assuming for newly added items id will not be there(db should generate)
if (itemRequest.getId() == null) {
Item item = new Item();
item.setName(itemRequest.getName());
item.setOrder(orderFromDb);
orderFromDb.getItems().add(item);
continue;
}
for (Item item : orderFromDb.getItems()) {
if (item.getId() == itemRequest.getId()) {
item.setName(request.getName());
}
}
}
}
}
解决方案
您没有保留已删除的项目。
您可以实现 ItemRepository 对象(从 CrudRepository 扩展),然后删除该项目。如果您删除商品,下次查询订单时,您的商品将不存在。
推荐阅读
- tensorflow - 是否可以在 GPU 上训练模型,然后在 CPU 上进行预测
- python - Apache Beam 中的会话窗口与 python
- node.js - Nodemailer - Sendmail 传输错误:TypeError:this._spawn 不是函数
- bash - 在 bash 中管理 csv 文件中的 Unix 权限读取动态字段
- java - 注释 - 找不到符号
- java - OnOptionsItemSelected - 按下一个按钮执行另一个按钮的操作
- angular - 使用 jasmine-marbles 的 takeUntil-using NGRX 效果测试未按预期完成
- node.js - Auth0 NodeJS JWT 身份验证在移动应用程序的 API 中
- javascript - 打字稿:从动态创建的对象中推断出确切的值
- python - 如何使用 TensorFlow 计算平均精度(mAP)?