首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ManyToMany in javax.persistence允许重复条目

ManyToMany in javax.persistence允许重复条目
EN

Stack Overflow用户
提问于 2014-06-26 04:12:53
回答 2查看 157关注 0票数 0

我有一个名为Order的表,它有很多项,所以我需要一张地图来将项目链接到订单。

现在我有这样的想法:

代码语言:javascript
复制
@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);,他们会得到更多

请告诉我,我的案子的最佳做法是什么?什么都找不到..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-26 05:56:09

看起来您的问题是,join表显然有一个复合主键,每个列都作为两个表的foregn键。然而,您的用例说明可能会有重复。在这种情况下,替代策略可以是映射实体。

代码语言:javascript
复制
@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;
票数 0
EN

Stack Overflow用户

发布于 2014-06-26 04:19:54

订单类别:

代码语言:javascript
复制
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Item> items;

物品类别:

代码语言:javascript
复制
@ManyToOne(cascade = {CascadeType.ALL} )
@JoinColumn(name = "orderId")
private Order order;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24422266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档