hashCode() and equals() methods of a composite id class

equals, hashcode, hibernate, java, many-to-many

Solution

these seems to work very well:

 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;
    }   

Problem

It's been days I'm trying to find the correct way to implement the equals() and hashCode() methods of a composite-id class. The trouble I'm facing when I try to update the main object (Gara) are: - StackOverflow - DuplicateKeyException: a different object with the same identifier value was already associated with the session - org.hibernate.ObjectNotFoundException: No row with the given identifier exists My Composite-id class ``` @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 + "]"; } } ```

Original source