I've always thought of hashCode and equals (even back in the smalltalk days) as being keys in the relational sense.
If I have an object that's mapping to a table, whatever is being identified as a key using annotations are the only attributes I use in hashCode and equals. I don't include any non-key attributes.
