当前位置: 首页 > 知识库问答 >
问题:

在双向一对多关系中替换集合

温智明
2023-03-14

给定以下具有双向一对多关系的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的项目。

共有1个答案

柯乐童
2023-03-14

我建议在你的OneToMany注释中添加orphanRemoving=true,然后从购物车中移除物品。此外,我建议使用add方法处理双向部分,如下所示:

public void addItem(Item item) {
  if(item != null) {
    this.items.add(item);
    item.setCart(this);
  }
}

如果需要,还可以添加删除功能。addItem函数可以这样使用:

cartWithItems.setItems(new HashSet<>());
newCartItems.forEach(cartWithItems::addItem);

希望这能回答你的问题。

 类似资料:
  • 第404页的“Java持久性2.0,最终发布”有以下示例: 示例3:从一个可嵌入类到另一个实体的一对一关联。 我希望员工内部有多个位置详细信息: 如何更改实体ParkingSpot以指向集合表EMP_LOCATION内的可嵌入Location细节。 应该是 替换为@ElementCollection? 非常感谢。

  • 问题内容: 我的实体中存在双向多对多关系。请参阅以下示例: 当我尝试将其序列化为JSON时,出现以下异常: “ java.lang.IllegalArgumentException:无法处理托管/反向引用’COLLABORATION_TAG’:反向引用类型(java.util.Set)与托管类型(foo.Collaboration)不兼容。 实际上,我知道这很有意义,因为javadoc明确声明您不

  • 我在我的实体中有一种双向的多对多关系。请参见下面的示例: 当我尝试将其序列化为JSON时,我得到了以下异常:' “java.lang.IllegalArgumentException:无法处理托管/反向引用'COLLABORATION_TAG':反向引用类型(java.util.Set)与托管类型(foo.COLLABORATION)不兼容。”。 实际上,我知道这是有道理的,因为javadoc明确

  • 假设我们要实现一个简单的从 Parent 到 Child 的 <one-to-many> 关联。 <set name="children"> <key column="parent_id"/> <one-to-many class="Child"/> </set > 如果我们运行下面的代码: Parent p = .....; Child c = new Child(); p.

  • 我在和之间具有双向多对多关系。在的帮助下创建两个实体,甚至创建它们的子实体都是简单明了的。 和都可以在的帮助下轻松地自动持久化,如下所示: 然而...更新会导致异常: 我尝试修改的以包括、和/或,但未成功。我们怎么绕过这件事?

  • 1. 前言 本节课程和大家一起聊聊一对多关联映射。通过本节课程,你将了解到: 如何实现一对多关联映射; 如何实现双向一对多关联映射; 关联映射中的级联操作。 2. 一对多关联映射 关系型数据库中表与表中的数据存在一对多(或多对一)关系。 如学生表、班级表。一个班级有多个学生,多个学生可以在同一个班级。 一对多或多对一本质上是一样的,如同一块硬币的正面和反面,只是看待事物的角度不同而已。 数据库中有