hibernate - 我如何让许多 @ManyToMany 关系起作用?

标签 hibernate jpa playframework

我有一个具有两个多对多关系的模型。 Play 框架为我创建了关系表,但没有一个 id 可以为空,导致我无法让我的代码工作。

Play 框架返回
PersistenceException 发生:插入 Costumer_Item (customersWhoIgnored_id, ignoreItems_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;
}

客户.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 关系起作用?

最佳答案

我认为两个关系都使用相同的连接表,默认名称为 Costumer_Item ,导致困惑。您需要手动指定不同的名称:

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

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

关于hibernate - 我如何让许多 @ManyToMany 关系起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4672901/

相关文章:

java - Spring @Transactional 到底如何工作?

java - 持久化基类不是@Entity的对象

java - 玩!框架在编译时挂起,没有报告错误

java - Hibernate 关系映射 - 必须吗?

java - 焊接-001408 : Unsatisfied dependencies for type ServiceLocator with qualifiers @Default

javascript - 无法提取结果集 org.hibernate.exception.SQLGrammarException

java - 是否可以创建指向内存中对象的 URL?

java - 了解实体映射到数据库 View 的删除或更新

playframework - play 2框架编译错误

docker - Play框架和Docker生产配置