javax.persistence中的ManyToMany允许重复条目

时间:2014-06-26 04:12:54

标签: java mysql persistence entitymanager

我有一个名为 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);

,他们会得到更多

请告诉我,我的案例的最佳做法是什么?找不到任何东西......

2 个答案:

答案 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;