Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javax.persistence中的manytomy允许重复条目_Java_Mysql_Persistence_Entitymanager - Fatal编程技术网

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

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

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