Java 复合id类的hashCode()和equals()方法
几天来,我一直在试图找到实现复合id类的equals()和hashCode()方法的正确方法 我尝试更新主对象(Gara)时面临的问题是:Java 复合id类的hashCode()和equals()方法,java,hibernate,many-to-many,equals,hashcode,Java,Hibernate,Many To Many,Equals,Hashcode,几天来,我一直在试图找到实现复合id类的equals()和hashCode()方法的正确方法 我尝试更新主对象(Gara)时面临的问题是: 堆栈溢出 DuplicateKeyException:具有相同标识符值的不同对象已与会话关联 org.hibernate.ObjectNotFoundException:不存在具有给定标识符的行 我的复合id类 @Embeddable public class GaraAgenziaId implements Serializable { pri
@Embeddable
public class GaraAgenziaId implements Serializable {
private static final long serialVersionUID = 4934033367128755763L;
static Logger logger = LoggerFactory.getLogger(GaraAgenziaId.class);
private Gara gara;
private Agenzia agenzia;
@ManyToOne
public Gara getGara() {
return gara;
}
public void setGara(Gara gara) {
this.gara = gara;
}
@ManyToOne
public Agenzia getAgenzia() {
return agenzia;
}
public void setAgenzia(Agenzia agenzia) {
this.agenzia = agenzia;
}
@Override
public String toString() {
return "GaraAgenziaId [Gara=" + gara + ", agenzia=" + agenzia
+ "]";
}
}
这些措施似乎效果很好:
public boolean equals(Object o) {
if (this== o) return true;
if (o ==null|| getClass() != o.getClass()) return false;
GaraAgenziaId that = (GaraAgenziaId) o;
if (gara !=null?!gara.equals(that.gara) : that.gara !=null) return false;
if (agenzia !=null?!agenzia.equals(that.agenzia) : that.agenzia !=null)
return false;
return true;
}
public int hashCode() {
int result;
result = (agenzia !=null? agenzia.hashCode() : 0);
result =31* result + (gara !=null? gara.hashCode() : 0);
return result;
}
31*a+b
是否有风险溢出?@Mindwin抱歉,我不是专家,所以无法回答你。这是在某处找到的一段代码,它是为我的目的工作的。它将溢出,但不会出错,因此它作为哈希代码仍然有效。@IanRobertson首先,非常感谢您的评论。但我能看到你的回复纯属运气(我正在查看我的星号列表)。记住@quote!!除息的