Entity как ключ HashMap — что может пойти не так?

Ответ

Если equals/hashCode используют lazy-связи (ManyToOne, OneToMany) — при первом вызове hashCode загрузится N связанных сущностей (N+1). Хуже: если связи двусторонние — бесконечная рекурсия и StackOverflowError.

Разбор: Главная опасность — equals/hashCode, завязанные на ленивые связи: их вызов триггерит подгрузку (N+1), а при двусторонних связях даёт бесконечную рекурсию и StackOverflowError. Дистрактор про сгенерированный id описывает реальную, но другую проблему — там корень в том, что hashCode основан на изменчивом id, а не в кэшировании самим HashMap; прокси с тем же id корректно проходят equals, а WeakHashMap к сути вопроса не относится.

Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.

Заказать гайд Пройти тест
новые гайды и свежие вопросы с собесов — первыми в Telegram Смотреть гайды Подписаться