我有一个名为 Order 的表,它有很多 Items ,所以我需要一张地图将 Items 链接到 Order
目前我有这个:
@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>();
但如果我想两次添加一个项目,它不允许重复。
当我手动编辑MySql数据库并删除索引时,我可以添加重复项。但是如果我打电话给em.refresh(order);
请告诉我,我的案例的最佳做法是什么?找不到任何东西......
答案 0 :(得分:0)
订单类:
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Item> items;
项目类:
@ManyToOne(cascade = {CascadeType.ALL} )
@JoinColumn(name = "orderId")
private Order order;
答案 1 :(得分:0)
看起来你的问题是连接表显然有一个复合主键,每列都作为两个表的foregn键。 但是,您的用例表明可能会重复。在这种情况下,备用策略可以是映射实体
@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;