微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对@OneToMany实体持久保留现有实体一次重复键

如何解决对@OneToMany实体持久保留现有实体一次重复键

我有一个实体Pack,其中应包含List个实体对象中的一个MenuItem,并且每个MenuItem对象应可持久到多个Pack

修改

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

   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的表。

现在,我尝试创建一个新的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);
}

但是在新表pack_menu_items中插入行并没有运气;

对此有任何帮助吗?

解决方法

如果Pack可以包含多个MenuItem,而MenuItem可以属于多个Pack,则实际上这不是OneToMany而是{ {1}}关系。

ManyToMany有一个不同的注释。要了解有关此内容的更多信息,建议您参考有关该主题的this教程。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。