为@OneToMany 实体多次保留现有实体(重复键)
Persist existing entities more than once (duplicate key) for @OneToMany entity
我有一个实体 Pack
应该包含 List
个 MenuItem
实体对象,每个 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
这实际上不是 OneToMany
但ManyToMany
-关系。
这些有不同的注释,@ManyToMany
。要了解更多相关信息,我建议阅读有关该主题的 this 教程。
我有一个实体 Pack
应该包含 List
个 MenuItem
实体对象,每个 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
这实际上不是 OneToMany
但ManyToMany
-关系。
这些有不同的注释,@ManyToMany
。要了解更多相关信息,我建议阅读有关该主题的 this 教程。