這是我的一個實體的複合主鍵。@IdClass JPA註釋
public class GroupMembershipPK implements Serializable{
private static final long serialVersionUID = 7816433876820743311L;
private User user;
private Group group;
public GroupMembershipPK(){
}
public boolean equals(Object o){
if(o==null){
return false;
}
if(o instanceof GroupMembershipPK){
final GroupMembershipPK groupMembershipPK=(GroupMembershipPK)o;
return groupMembershipPK.group.getGroupName().equals(this.group.getGroupName()) &&
groupMembershipPK.user.getName().equals(this.user.getName());
}
return false;
}
public int hashCode(){
return super.hashCode();
}
}
繼承人我的實體(的一部分)使用上述作爲複合主鍵。
@Entity
@IdClass(GroupMembershipPK.class)
public class GroupMembership extends AbstractModelElementVersionOther{
private static final long serialVersionUID = 9188465566607060376L;
private String memType;
private Group group;
private User user;
public GroupMembership(){
super();
}
@Column(nullable=false)
public String getMemType(){
return this.memType;
}
public void setMemType(String memType){
this.memType=memType;
}
@Id
@ManyToOne
@JoinColumn(name="groupId")
public Group getGroup(){
return this.group;
}
public void setGroup(Group group){
this.group=group;
}
@Id
@ManyToOne
@JoinColumn(name="userId")
public User getUser(){
return this.user;
}
public void setUser(User user){
this.user=user;
}
@Override
public boolean equals(Object o) {
//
我對上面的實體應該是什麼樣的equals方法有點困惑。我如何比較兩個複合主鍵?
我的代碼的其他部分的任何意見也歡迎。
你也應該實現使用用戶ID和的groupId屬性,因爲相等的對象也必須具有相同的哈希一個hashCode方法。例如: (getUserId()== null?0:getUserId()。hashCode())^(getGroupId()== null?0:getGroupId()。hashCode()) – 2009-09-24 12:11:11
@JörnHorstmann嗨,你好對。但由於答案的原因,它已經被執行只是等於執行。無論如何,謝謝 – 2009-09-24 13:35:44
@Arthur Ronald。謝謝,完美的作品。但是,你能告訴我如何使用上面描述的複合主鍵持久實體嗎?我在JBoss中遇到以下錯誤,當我嘗試這樣做時.-------「線程中的異常」main「javax.ejb.EJBException:javax.persistence.PersistenceException:org.hibernate.id.IdentifierGenerationException:ids for這個類必須在調用save()之前手動分配save()「 – soontobeared 2009-10-06 16:11:26