У меня есть простая роль класса:
@Entity
@Table (name = "ROLE")
public class Role implements Serializable {
@Id
@GeneratedValue
private Integer id;
@Column
private String roleName;
public Role () { }
public Role (String roleName) {
this.roleName = roleName;
}
public void setId (Integer id) {
this.id = id;
}
public Integer getId () {
return id;
}
public void setRoleName (String roleName) {
this.roleName = roleName;
}
public String getRoleName () {
return roleName;
}
}
Теперь я хочу переопределить его методы equals и hashCode. Мое первое предложение:
public boolean equals (Object obj) {
if (obj instanceof Role) {
return ((Role)obj).getRoleName ().equals (roleName);
}
return false;
}
public int hashCode () {
return id;
}
Но когда я создаю новый объект Role, его id равно null. Вот почему у меня есть некоторые проблемы с реализацией метода hashCode. Теперь я могу просто вернуть roleName.hashCode ()
, но что, если roleName не является необходимым полем? Я почти уверен, что это не так сложно составить более сложный пример, который не может быть решен путем возврата hashCode одного из его полей.
Поэтому я хотел бы увидеть некоторые ссылки на связанные обсуждения или услышать ваш опыт решения этой проблемы. Спасибо!