如何解决对@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 举报,一经查实,本站将立刻删除。