Если хеш-код одного и того же объекта изменяется со временем, результаты в основном непредсказуемы.Хеш-коллекции используют хеш-код для назначения объектов в сегменты - если ваш хеш-код внезапно изменяется, коллекция, очевидно, не знает, поэтому может не найти существующий объект, потому что теперь хэшируется в другой сегмент.
Возвращение идентификатора объекта само по себе неплохо, но если многие из них имеют id = 0, как вы упомянули, это снизит производительность хеш-таблицы: все объекты с одинаковым хеш-кодом попадают в одну корзину, поэтомуВаша хеш-таблица теперь не лучше, чем линейный список.
Обновление: Теоретически, ваш хеш-код может изменяться до тех пор, пока никто не знает об этом - это подразумевает именно то, что @bestsssупоминается в его комментарии, который заключается в том, чтобы удалить ваш объект из любых коллекций, которые могут его содержать, и вставить его снова после изменения хеш-кода.На практике лучшей альтернативой является создание хеш-кода из фактических полей содержимого вашего объекта, а не использование идентификатора базы данных.