org.hibernate.MappingException:使用@JoinTable进行集合映射的重复列

时间:2013-02-06 16:40:53

标签: hibernate jointable

我有以下(简化)情况:

表A的字段:

  • ID
  • COMMONID

表AB的字段:

  • AID
  • BID COMMONID

表B的字段:

  • ID
  • COMMONID

并希望使用像这样的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的新手。

2 个答案:

答案 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)

ER Diagram of what you 假设您允许 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>();
}