javax.persistence中的manytomy允许重复条目
我有一个名为Order的表,其中有许多项,因此我需要一个映射将这些项链接到订单 目前,我有以下几点:javax.persistence中的manytomy允许重复条目,java,mysql,persistence,entitymanager,Java,Mysql,Persistence,Entitymanager,我有一个名为Order的表,其中有许多项,因此我需要一个映射将这些项链接到订单 目前,我有以下几点: @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) @Fetch(value = FetchMode.SUBSELECT) @JoinTable(name = "order_map_item", joinColumns = @JoinColumn(name = "orderId"), inverseJoinColumns
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@Fetch(value = FetchMode.SUBSELECT)
@JoinTable(name = "order_map_item", joinColumns = @JoinColumn(name = "orderId"), inverseJoinColumns = @JoinColumn(name = "itemId"))
List<Item> items = new ArrayList<Item>();
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@Fetch(值=FetchMode.SUBSELECT)
@JoinTable(name=“order\u map\u item”,joinColumns=@JoinColumn(name=“orderId”),inverseJoinColumns=@JoinColumn(name=“itemId”))
列表项=新建ArrayList();
但是如果我想添加一个项目两次,它不允许重复
当我手工编辑MySql数据库并删除索引时,我可以添加重复项。但是如果我调用em.refresh(order),它们会得到更多代码>
请告诉我,我的案例的最佳实践是什么?找不到任何东西…订单类:
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Item> items;
看起来您的问题在于联接表显然有一个复合主键,其中每一列都是这两个表的外键。
然而,您的用例表明可能存在重复。在这种情况下,另一种策略可以是映射实体
@Entity
public class OrderItemMapping {
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne
@JoinColumn(name="order")
private Order order;
@ManyToOne
@JoinColumn(name="item")
private Item item;
听起来像是一对多的案例。一份订单有很多项目。不,有像“啤酒”、“可乐”和“水”这样的项目。我想把它们映射到订单上。。。所以订单1有['Beer'、'Beer'、'Water'],一件商品可以多次订购
@Entity
public class OrderItemMapping {
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne
@JoinColumn(name="order")
private Order order;
@ManyToOne
@JoinColumn(name="item")
private Item item;