[英]replace collection in bidirectional one-to-many relationship
給定以下具有雙向一對多關系的 JPA 個實體
@Entity
public class Cart {
@OneToMany(mappedBy="cart")
private Set<Items> items;
// getters and setters
}
@Entity
public class Items {
@ManyToOne
@JoinColumn(name="cart_id", nullable=false)
private Cart cart;
// getters and setters
}
如果我從已經包含一些項目的數據庫中加載購物車
Cart cartWithItems = CartRepository.findById(cartId);
我想用新的項目集合替換此購物車中的項目
Set<Item> newCartItems = ItemRepository.findAllById(newItemIds);
執行此替換的最簡單/最佳方法是什么? 理想情況下,我希望生成的 SQL 語句相當高效,但我的主要目標是使用簡潔易讀的代碼執行替換。
只是為了清楚我所說的替換的意思:
如果購物車最初包含 ID 為 2、3、4 的商品, newItemIds
包含 4、5、6,那么替換后,購物車應包含 ID 為 4、5、6 的商品,ID 為 2、3 的商品應繼續存在(即不應刪除它們)。
我建議將orphanRemoval = true
添加到您的OneToMany
注釋中,然后從您的購物車中刪除商品。 此外,我會推薦一種處理雙向部分的add
方法,如下所示:
public void addItem(Item item) {
if(item != null) {
this.items.add(item);
item.setCart(this);
}
}
如果需要,您還可以添加remove
function。 addItem
function 可以這樣使用:
cartWithItems.setItems(new HashSet<>());
newCartItems.forEach(cartWithItems::addItem);
希望這能回答您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.