Проверяет знание лучших практик для работы с ORM (например, Hibernate).
Используйте только неизменяемые поля (например, id).
Для equals() и hashCode() учитывайте одни и те же поля.
Избегайте ленивой загрузки (Lazy) в этих методах.
Проблемы с ORM:
Поля могут быть null до сохранения в БД.
Ленивая загрузка (@OneToMany(fetch = LAZY)) может вызвать исключение.
Пример для JPA-сущности:
@Entity
public class User {
@Id
private Long id;
private String name;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return Objects.equals(id, user.id); // Только id!
}
@Override
public int hashCode() {
return Objects.hash(id);
}
}Вывод:
Для entity-классов equals()/hashCode() должны зависеть только от первичного ключа (id).