为@OneToMany 实体多次保留现有实体(重复键)

Persist existing entities more than once (duplicate key) for @OneToMany entity

我有一个实体 Pack 应该包含 ListMenuItem 实体对象,每个 MenuItem 对象应该是 persistable 到更多比一个 Pack.

编辑

我在 Pack 实体中使用了 @ManyToMany 注释:

   public class Pack {
   ...

   @ManyToMany(mappedBy = "packs")
    private List<MenuItem> menuItems;
  }

并且在 MenuItem 实体中:

public class MenuItem{
 ...

@ManyToMany
@JoinTable(
        name = "pack_menu_items",
        joinColumns = { @JoinColumn(name = "menu_item_id") },
        inverseJoinColumns = { @JoinColumn(name = "pack_id") }
)
private List<Pack> packs;
}

这样,在 Postgres 数据库中生成了一个名为 pack_menu_items 的 table。

现在我尝试创建一个新的 Pack 对象并同时影响它一个 MenuItem 列表,但这没有用: post request: Pack with menuItems (image)

并且我尝试将 menuItems 添加到 Pack 中:

@Override
public Pack addItems(int id, List<MenuItem> menuItems) {
    Pack pack = get(id);
    assert pack != null;
    List<MenuItem> menuItemsWillUpdate = pack.getMenuItems();
    menuItemsWillUpdate.addAll(menuItems);
    pack.setMenuItems(menuItemsWillUpdate);
    return repository.save(pack);
}

但在新的 Table pack_menu_items;

中插入行时却没有运气

有什么帮助吗?

如果一个 Pack 可以包含多个 MenuItem 并且一个 MenuItem 可以属于多个 Pack 这实际上不是 OneToManyManyToMany-关系。

这些有不同的注释,@ManyToMany。要了解更多相关信息,我建议阅读有关该主题的 this 教程。