ここには、自分のエンティティの1つの複合主キーがあります。@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();
}
}
Heres私のエンティティ(一部)は、複合主キーとして上記を使用しています。
@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メソッドの実装とは何かについて少し混乱しています。 2つの複合主キーを比較するにはどうすればよいですか?
私のコードの他の部分についてのコメントも大歓迎です。
等しいオブジェクトも同じハッシュを持たなければならないので、また、ユーザーIDとのgroupIdのプロパティを使用していますhashCodeメソッドを実装する必要があります。例: (getUserId()== null?0:getUserId()。hashCode())^(getGroupId()== null?0:getGroupId()。hashCode()) –
@JörnHorstmannこんにちは右。しかし、それは実装されているため、回答は実装のためだけです。とにかくありがとうございます –
@Arthur Ronald。ありがとう、完璧に動作します。しかし、上記のように複合主キーを使用してエンティティを永続化する方法を教えてください。 JBossで私がしようとすると、次のようなエラーが発生します.------- "スレッド" main "javax.ejb.EJBExceptionの例外:javax.persistence.PersistenceException:org.hibernate.id.IdentifierGenerationException:idsこのクラスはsave()を呼び出す前に手動で割り当てる必要があります " – soontobeared