Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: equals, hashcode, jpa, entity

Какие рекомендации по переопределению equals и hashCode для entity-классов?

Проверяет знание лучших практик для работы с ORM (например, Hibernate).

Короткий ответ

  1. Используйте только неизменяемые поля (например, id).

  2. Для equals() и hashCode() учитывайте одни и те же поля.

  3. Избегайте ленивой загрузки (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).

Уровень

  • Рейтинг:

    1

  • Сложность:

    7

Навыки

  • Java

    Java

Ключевые слова

#equals

#hashcode

#jpa

#entity

Подпишись на Java Developer в телеграм