我有一个名为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);,他们会得到更多
请告诉我,我的案子的最佳做法是什么?什么都找不到..。
发布于 2014-06-26 05:56:09
看起来您的问题是,join表显然有一个复合主键,每个列都作为两个表的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;发布于 2014-06-26 04:19:54
订单类别:
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Item> items;物品类别:
@ManyToOne(cascade = {CascadeType.ALL} )
@JoinColumn(name = "orderId")
private Order order;https://stackoverflow.com/questions/24422266
复制相似问题