簡體   English   中英

替換雙向一對多關系中的集合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM