我有一个包含两对多关系的模型。 Play框架为我创建了关系表,但是没有一个id可以为空,导致我无法让我的代码工作。
播放框架返回 发生PersistenceException:插入Costumer_Item(customersWhoIgnored_id,ignoredItems_id)值(?,?)
19:20:54,530 ERROR ~ Field 'customersWhoBought_id' doesn't have a default value
19:20:54,531 ERROR ~ Could not synchronize database state with session
org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
代码是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;
}
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;
}
如何让许多@ManyToMany关系起作用?
答案 0 :(得分:3)
我认为两个关系都使用默认名称为Costumer_Item
的相同连接表,这会导致混淆。您需要手动指定不同的名称:
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "CostumerToOwnedItems")
public List<Item> ownedItems;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "CostumerToIgnoredItems")
public List<Item> ignoredItems;
答案 1 :(得分:3)
我强烈建议不要使用ManyToMany,而只是使用一对多和多对一关系,中间有一个显式域对象。很容易与ManyToMany混淆(正如您所发现的那样),并且您经常不得不向ManyToMany添加其他数据。
此外,FWIW,这是一个JPA / Hibernate问题,而不是Play框架问题。