Метод hashCode () для связанных объектов - PullRequest
0 голосов
/ 02 апреля 2012

Я читал, что при использовании JPA вы должны реализовать hashCode () / equals () для ваших сущностей. Так, например, Eclipse имеет эту замечательную возможность генерировать эти методы для классов.

Но какие поля мне нужно выбрать? Я прочитал это, выбирая Длинный идентификатор; поле вашей сущности не очень хорошая идея. (правильно? почему?) Следует использовать бизнес-ключ (некоторые поля сущности, которые можно использовать для идентификации сущности. Верно?) В методах hashCode () / equals ().

Учитывая следующий сценарий: 1: n отношение между A и B ... это хорошая идея, чтобы использовать эти ссылки в методе hashcode ()? если я делаю это, я иногда сталкиваюсь с исключениями java.util.ConcurrentModificationException или Stackoverflow. Как насчет переменных коллекции? я думаю, что я не должен использовать их в моей функции hashcode () ... кто-нибудь может дать мне подсказку?

Ответы [ 3 ]

0 голосов
/ 02 апреля 2012

Методы равенства и хэш-кода должны всегда реализовываться либо по первичному ключу, либо по вашему бизнес-ключу, это необходимо, если вы хотите придерживаться требований вашего постоянного менеджера. Проверьте здесь

0 голосов
/ 02 апреля 2012

Вы можете реализовать свою собственную логику в хеш-коде, чтобы получить уникальный номер. Например,

вы можете сделать некоторую комбинацию ^ -ing (XOR-ing) переменных экземпляра класса (другими словами, переворачивая ихбиты), возможно, умножая их на простое число.

0 голосов
/ 02 апреля 2012

Рассмотрите возможность использования полей (как можно меньше), которые будут однозначно идентифицировать объект.Если бы это был Персона, это могло бы быть имя, отчество и фамилия.Или, еще лучше, номер социального страхования, если лицо США.Я не вижу проблем с использованием идентификатора БД, если таблица не может содержать повторяющиеся объекты.В общем случае для идентификации объекта не требуется проверка идентификаторов связанных с ним объектов (отношение 1: n), а только для локальных полей.

...