Hibernate 我如何让许多@manytomy关系发挥作用?

Hibernate 我如何让许多@manytomy关系发挥作用?,hibernate,jpa,playframework,Hibernate,Jpa,Playframework,我有一个具有两个多对多关系的模型。Play framework为我创建了关系选项卡,但没有一个ID可以为null,这导致我无法让代码正常工作 播放框架返回 发生PersistenceException:插入到Customer_项(CustomerWhoIgnored_id,ignoredItems_id)值(?,) 代码为Item.java: @Entity public class Item extends Model { @ManyToMany(cascade = CascadeType

我有一个具有两个多对多关系的模型。Play framework为我创建了关系选项卡,但没有一个ID可以为null,这导致我无法让代码正常工作

播放框架返回 发生PersistenceException:插入到Customer_项(CustomerWhoIgnored_id,ignoredItems_id)值(?,)

代码为Item.java:

@Entity
public class Item extends Model {
  @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "ownedItems")
  public List<Costumer> customersWhoBought;

  @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "ignoredItems")
  public List<Costumer> customersWhoIgnored;
}
@实体
公共类项扩展模型{
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy=“ownedItems”)
公开购买的客户名单;
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy=“ignoredItems”)
已忽略的公共列表客户;
}
Customer.java:

@Entity
public class Customer extends Model {
  @Column(nullable = true)
  @ManyToMany(cascade = CascadeType.ALL)
  public List<Item> ownedItems;

  @Column(nullable = true)
  @ManyToMany(cascade = CascadeType.ALL)
  public List<Item> ignoredItems;

}
@实体
公共类客户扩展模型{
@列(nullable=true)
@多个(级联=级联类型.ALL)
公开上市;
@列(nullable=true)
@多个(级联=级联类型.ALL)
公开名单;
}

如何使多个@ManyToMany关系正常工作?

我认为这两个关系使用相同的联接表,默认名称为
customer\u Item
,这会导致混淆。您需要手动指定不同的名称:

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "CostumerToOwnedItems")
public List<Item> ownedItems;

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "CostumerToIgnoredItems")
public List<Item> ignoredItems;
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name=“CustomerTownEdItems”)
公开上市;
@多个(级联=级联类型.ALL)
@JoinTable(name=“CustomerToignoredItems”)
公开名单;

我强烈建议不要使用ManyToMany,而是使用一对多和多对一关系,中间有一个显式的域对象。很容易与ManyToMany(正如您所发现的)混淆,并且您经常不得不向ManyToMany添加额外的数据

另外,FWIW,这是一个JPA/Hibernate问题,而不是一个Play框架问题

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "CostumerToOwnedItems")
public List<Item> ownedItems;

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "CostumerToIgnoredItems")
public List<Item> ignoredItems;