Đây là khóa chính kết hợp cho một trong các thực thể của tôi.@IdClass JPA Chú thích
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();
}
}
Là thực thể của tôi (một phần) sử dụng ở trên làm Khóa chính kết hợp.
@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) {
//
Tôi hơi bối rối về việc nên thực hiện phương pháp bằng cho thực thể trên. Làm cách nào tôi có thể so sánh hai khóa chính kết hợp?
Mọi nhận xét về các phần khác của mã của tôi đều được chào đón.
Bạn cũng nên thực hiện một phương thức hashCode mà sử dụng userId và tài sản groupId, vì đối tượng bằng nhau cũng phải có cùng bảng băm. Ví dụ: (getUserId() == null? 0: getUserId(). HashCode())^(getGroupId() == null? 0: getGroupId(). HashCode()) –
@ Jörn Horstmann Xin chào, bạn là đúng. Nhưng nó đã được thực hiện chỉ bằng thực hiện do trả lời. Cảm ơn bạn anyway –
@Arthur Ronald. Cảm ơn, hoạt động hoàn hảo. Tuy nhiên, bạn có thể cho tôi biết cách duy trì thực thể bằng cách sử dụng khóa chính kết hợp như được mô tả ở trên không? Tôi nhận được lỗi sau trong JBoss khi tôi cố gắng làm điều đó .——--- "Ngoại lệ trong chủ đề" chính "javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.id.IdentifierGenerationException: ids cho Lớp này phải được gán thủ công trước khi gọi save() " – soontobeared