Let's say I have the following scenario:
@Entity
public class Person {
    @Id
    private Long id; //Surrogate key
    @Embedded
    private Name name; //Natural key
    public int hashCode() {
        ... //based on natural key Name
    }
    public boolean equals(Object obj) {
        ... //based on natural key Name
    }
}
@Embeddable
public class Name {
    private String firstName;
    private String middleName;
    private String lastName;
    //Should I implement equals/hashCode baseed on the three fields?
}
Should Name class implement equals and hashCode on Name class in order that Person equals work properly?.
For an Embeddable object that will be used as an EmbeddedId is a must. But in this example I'm using surrogate key.
 
    