【发布时间】:2018-04-09 09:11:27
【问题描述】:
我有 3 个这样的实体:
@Entity
public class A {
@Id
private String id;
}
@Entity
@IdClass(B.BPK.class)
public class B {
@Id
private String id;
@Id
@ManyToOne
private A a;
}
@Entity
public class C {
@Id
private int refOne;
@Id
private int refTwo;
@Id
private A a;
@ManyToMany
private Set<B> bs;
}
我有一个关于为实体 C 的关系 @ManyToMany 生成的表的问题。生成了 5 列:refOne、refTwo、a_id、b_id、b_a_id。
如您所见,a_id 和 b_a_id 是同一列上的外键,在我的模型中,a_id 不可能与 b_a_id 不同。
有没有不重复列的解决方案?
编辑:
我坚持这一点,A是C的id的一部分,C中的bs可以是空的。
我想了几个解决方案,但没有一个是真正令人满意的:
- 使用使用 b_id 和 a_id 的转换器来恢复 bs 实体
- 我尝试像这样使用@JoinTable 管理列:
JoinTable 方法:
@JoinTable(name = "bs", joinColumns = {
@JoinColumn(name = "refOne", referencedColumnName = "refOne"),
@JoinColumn(name = "refTwo", referencedColumnName = "refTwo"),
@JoinColumn(name = "a_id", referencedColumnName = "a_id")
}, inverseJoinColumns = {
@JoinColumn(name = "b_id", referencedColumnName = "b_id"),
@JoinColumn(name = "b_a_id", referencedColumnName = "b_a_id", insertable = false, updatable = false)
但我面临这些问题Mixing insertable and non insertable columns in a property is not allowed orParameter index out of range`
})
【问题讨论】: