Oto złożony klucz podstawowy dla jednego z moich podmiotów.@IdClass JPA Adnotacja
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();
}
}
Oto moja jednostka (część) z wykorzystaniem powyższego jako złożonego klucza podstawowego.
@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) {
//
Jestem trochę zdezorientowany na temat tego, jak powinna wyglądać implementacja metody równości dla powyższego podmiotu. Jak mogę porównać dwa złożone klucze podstawowe?
Wszelkie komentarze na temat innych części mojego kodu są również mile widziane.
Należy również zaimplementować metodę hashCode który używa identyfikatora użytkownika i właściwości GroupID, ponieważ równe obiekty muszą mieć ten sam hash. Na przykład: (getUserId() == null? 0: getUserId(). HashCode())^(getGroupId() == null? 0: getGroupId(). HashCode()) –
@ Jörn Horstmann Witaj, jesteś dobrze. Ale zaimplementowano tylko równe wdrożenie z powodu odpowiedzi. I tak dziękuję –
@Arthur Ronald. Dzięki, działa idealnie. Czy możesz mi jednak powiedzieć, jak utrzymywać encję przy użyciu złożonego klucza podstawowego, jak opisano powyżej? Otrzymuję następujący błąd w JBoss, gdy próbuję to zrobić .------- "Wyjątek w wątku" główny "javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.id.IdentifierGenerationException: id dla klasa ta musi być ręcznie przypisana przed wywołaniem save() " – soontobeared