Встречается на собеседованиях • сегодня

Что будет, если использовать в качестве ключа в HashMap Entity из Hibernate и не переопределять у него equals и hashCode

Если использовать Entity из Hibernate в качестве ключа в HashMap без переопределения equals и hashCode, будут использованы стандартные реализации из Object. Это приведет к проблемам:

  1. Некорректное сравнение – стандартный equals сравнивает ссылки, а не содержимое объектов. Даже две сущности с одинаковыми полями будут считаться разными ключами.
  1. Нестабильность хеш-кода – стандартный hashCode зависит от адреса в памяти. При изменении состояния сущности (например, после загрузки из БД) хеш-код изменится, и ключ станет недоступен в HashMap.

Пример:

java
@Entity
public class User {
    @Id
    private Long id;
    private String name;
    // нет equals/hashCode
}

User user1 = new User(1L, "Alice");
map.put(user1, "value");

// После изменений или повторной загрузке:
user1.setName("Bob"); // hashCode изменился!
map.get(user1); // вернет null - ключ "потерялся"

Решение: всегда переопределяйте equals и hashCode для сущностей, используя неизменяемые поля (обычно ID).

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы