【发布时间】:2015-10-18 21:51:37
【问题描述】:
我有这个实体模型(简化):
@Entity
class A {
@Id
String id;
Collection<B> bs;
}
@Entity
class B {
@Id
String id;
@ManyToOne
@JoinColumn(name = "c_id", nullable = false)
C c;
}
@Entity
class C {
@Id
String id;
}
在 A 和 B 之间添加连接表(多对多关系)并使用 A.id 和 B.c.id 强制执行复合 UK 的最佳方法是什么?
我尝试过这样的事情:
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable
(name = "a_b",
joinColumns = @JoinColumn(name = "a_id"),
inverseJoinColumns = {
@JoinColumn(name = "b_id", referencedColumnName = "id"),
@JoinColumn(name = "c_id", referencedColumnName = "c_id")},
uniqueConstraints = @UniqueConstraint(name = "uk_a_c", columnNames = {"a_id", "c_id"}))
但我得到一个MultipleBagFetchException,这很奇怪。这一定与c_id不是主键的一部分有关。如果我从inverseJoinColumns 中删除c_id,它会按预期工作,但这不是我需要的。
【问题讨论】:
标签: java hibernate jpa many-to-many hibernate-mapping