我有以下(简化)情况:
表A的字段:
表AB的字段:
表B的字段:
并希望使用像这样的OneToMany(在表A上映射的主类中)将它映射到实体:
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = false, fetch = FetchType.LAZY)
@JoinTable(name = "AB",
joinColumns= {
@JoinColumn(name = "AID", referencedColumnName="ID"),
@JoinColumn(name = "COMMONID", referencedColumnName="COMMONID")},
inverseJoinColumns = {
@JoinColumn(name = "BID", referencedColumnName="ID"),
@JoinColumn(name = "COMMONID", referencedColumnName="COMMONID")})
private Set<MyClassForB> list= new HashSet<MyClassForB>();
构建会话,我收到以下错误:
org.hibernate.MappingException: Repeated column in mapping for collection using @JoinTable list column: COMMONID
我做错了什么?考虑一下我是Hibernate的新手。
答案 0 :(得分:0)
尝试添加可插入和可更新的
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = false, fetch = FetchType.LAZY)
@JoinTable(name = "AB",
joinColumns= {
@JoinColumn(name = "AID", referencedColumnName="ID", insertable = false, updatable = false),
@JoinColumn(name = "COMMONID", referencedColumnName="COMMONID", insertable = false, updatable = false)},
inverseJoinColumns = {
@JoinColumn(name = "BID", referencedColumnName="ID", insertable = false, updatable = false),
@JoinColumn(name = "COMMONID", referencedColumnName="COMMONID", insertable = false, updatable = false)})
private Set<MyClassForB> list= new HashSet<MyClassForB>();
但是我不确定你是否能够更新这个集合,我的用例是只读的。
答案 1 :(得分:0)
假设您允许 JPA 提供程序(例如 Hibernate)创建表...试试这个
Class A{
@ManyToMany
@JoinTable(
name = "AB",
joinColumns = @JoinColumn(name = "A_Id"),
inverseJoinColumns = @JoinColumn(name = "B_Id")
)
private Set<B> blist= new HashSet<B>();
}
Class B{
@ManyToMany(cascade = CascadeType.ALL, mappedBy = "A_Id")
private Set<A> blist= new HashSet<A>();
}