2016-04-19 15 views
0

複合キーを持つエンティティの多対多マッピングを行っていますが、「フィールドリスト」に「不明な列」の「不明な列」が表示されています。助けてください。以下は私のエンティティクラスとマッピングです。前もって感謝します。複合キーを持つエンティティのJPA2の多対多マッピング

@Entity 
@Table(name = "tblrole") 
public class Role { 
@Column(name = "Role_Name") 
String roleName; 

@Column(name = "Role_Id", insertable = false, updatable = false) 
Integer roleId; 

@Column(name = "Company_Id", insertable = false, updatable = false) 
Integer companyId; 

@EmbeddedId 
RolePk rolePk; 


@ManyToMany(fetch = FetchType.LAZY) 
@JoinTable(name = "tblroleright", 
joinColumns = { 
@JoinColumn(name = "Role_Id", insertable = false, updatable = false), 
@JoinColumn(name = "Company_Id", insertable = false, 
updatable = false) }) 
List<Right> rightList; 
} 



@Embeddable 
public class RolePk implements Serializable{ 

/** 
* 
*/ 
private static final long serialVersionUID = 1L; 

@Column(name = "Role_Id") 
Integer roleId; 

@Column(name = "Company_Id") 
Integer companyId; 

public Integer getRoleId() { 
    return roleId; 
} 

public void setRoleId(Integer roleId) { 
    this.roleId = roleId; 
} 

public Integer getCompanyId() { 
    return companyId; 
} 

public void setCompanyId(Integer companyId) { 
    this.companyId = companyId; 
} 

@Override 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + 
    ((companyId == null) ? 0 : companyId.hashCode()); 
    result = prime * result + 
    ((roleId == null) ? 0 : roleId.hashCode()); 
    return result; 
} 

@Override 
public boolean equals(Object obj) { 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 
    RolePk other = (RolePk) obj; 
    if (companyId == null) { 
     if (other.companyId != null) 
      return false; 
    } else if (!companyId.equals(other.companyId)) 
     return false; 
    if (roleId == null) { 
     if (other.roleId != null) 
      return false; 
    } else if (!roleId.equals(other.roleId)) 
     return false; 
    return true; 
} 

public RolePk(Integer roleId, Integer companyId) { 
    super(); 
    this.roleId = roleId; 
    this.companyId = companyId; 
} 

public RolePk() { 
    super(); 
    // TODO Auto-generated constructor stub 
} 

} 


@Entity 
@Table(name = "tblright") 
public class Right { 

@Column(name = "Right_Name") 
String rightName; 

@Column(name = "Right_Id", insertable = false, updatable = false) 
Integer rightId; 

@Column(name = "Company_Id", insertable = false, updatable = false) 
Integer companyId; 

@EmbeddedId 
RightPk rightPk; 

public String getRightName() { 
    return rightName; 
} 

/*@ManyToMany(fetch = FetchType.LAZY) 
@JoinTable(name = "tblroleright", 
joinColumns = { 
@JoinColumn(name = "Right_Id", insertable = false, updatable = false), 
@JoinColumn(name = "Company_Id", insertable = false, 
updatable = false) }) 
List<Role> roleList;*/ 

public void setRightName(String rightName) { 
    this.rightName = rightName; 
} 

public Integer getRightId() { 
    return rightId; 
} 

public void setRightId(Integer rightId) { 
    this.rightId = rightId; 
} 

/*public List<Role> getRoleList() { 
    return roleList; 
} 

public void setRoleList(List<Role> roleList) { 
    this.roleList = roleList; 
}*/ 

public Integer getCompanyId() { 
    return companyId; 
} 

public void setCompanyId(Integer companyId) { 
    this.companyId = companyId; 
} 

public RightPk getRightPk() { 
    return rightPk; 
} 

public void setRightPk(RightPk rightPk) { 
    this.rightPk = rightPk; 
} 
} 

@Embeddable 
public class RightPk implements Serializable{ 

/** 
* 
*/ 
private static final long serialVersionUID = 1L; 

@Column(name = "Right_Id") 
Integer rightId; 

@Column(name = "Company_Id") 
Integer companyId; 



public Integer getRightId() { 
    return rightId; 
} 

public void setRightId(Integer rightId) { 
    this.rightId = rightId; 
} 

public Integer getCompanyId() { 
    return companyId; 
} 

public void setCompanyId(Integer companyId) { 
    this.companyId = companyId; 
} 

@Override 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + 
    ((companyId == null) ? 0 : companyId.hashCode()); 
    result = prime * result + 
    ((rightId == null) ? 0 : rightId.hashCode()); 
    return result; 
} 

@Override 
public boolean equals(Object obj) { 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 
    RightPk other = (RightPk) obj; 
    if (companyId == null) { 
     if (other.companyId != null) 
      return false; 
    } else if (!companyId.equals(other.companyId)) 
     return false; 
    if (rightId == null) { 
     if (other.rightId != null) 
      return false; 
    } else if (!rightId.equals(other.rightId)) 
     return false; 
    return true; 
} 



public RightPk(Integer rightId, Integer companyId) { 
    super(); 
    this.rightId = rightId; 
    this.companyId = companyId; 
} 

public RightPk() { 
    super(); 
    // TODO Auto-generated constructor stub 
} 

} 
+0

「roleId」と「companyId」AND rolePk(同じものを含む)があるのはなぜですか?どちらか一方 –

+0

rolePd – Monika

+0

で照会するのではなく、roleIdとcompanyIdに基づいて照会するので、EmbeddedPKは必要ありません!ちょうどObjectIdClassを入れてください –

答えて

0

まず、エンティティでのPKの内容を複製する必要はありません。 第2に、複合IDを使用して多対多の関連付けを作成することはできません。両方のクラスに関連する新しいエンティティRoleRightを、ロールと右端の両方を含む1対多の関連付けで作成する必要があります。

関連する問題