Здесь были несколько обсуждения об объектах JPA и реализация hashCode()/equals() должен использоваться для классов сущностей JPA. Большинство (если не все) из них зависят от Hibernate, но я бы хотел обсудить их с JPA-реализацией-нейтрально (кстати, я использую EclipseLink).
Все возможные реализации имеют свои собственные преимущества и недостатки относительно:
-   hashCode()/equals()Контракт соответствие (неизменяемость) для операцийList/Set
- Можно обнаружить идентичные объекты (например, из разных сеансов, динамические прокси из ленивых загружаемых структур данных)
-  Являются ли сущности правильными в  состоянии (или не сохраняющемся)
Насколько я вижу, есть три параметра:
-  Не переопределяйте их; полагайтесь на Object.equals()иObject.hashCode()-  hashCode()/equals()работа
- не может идентифицировать идентичные объекты, проблемы с динамическими прокси-серверами
- никаких проблем с отдельными объектами
 
-  
-  Переопределить их на основе первичного ключа 
-  hashCode()/equals()нарушены
- правильная идентификация (для всех управляемых объектов)
- проблемы с отдельными объектами
 
-  
-  Переопределить их на основе  Бизнес-Id (поля непервичного ключа, а также о внешних ключах?)
-  hashCode()/equals()нарушены
- правильная идентификация (для всех управляемых объектов)
- никаких проблем с отдельными объектами
 
-  
Мои вопросы:
-  Я пропустил опцию и/или про/точку подключения? 
- Какой вариант вы выбрали и почему?
 
 ОБНОВЛЕНИЕ 1:
В разделе "hashCode()/equals() сломаны", я имею в виду, что последовательные вызовы hashCode() могут возвращать разные значения, которые (когда правильно реализованы) не нарушаются в смысле документации Object API, но что вызывает проблемы при попытке получить измененный объект из Map, Set или другого хэш-основанного Collection. Следовательно, реализация JPA (по крайней мере, EclipseLink) в некоторых случаях будет работать некорректно.
ОБНОВЛЕНИЕ 2:
Спасибо за ваши ответы - у большинства из них замечательное качество. К сожалению, я до сих пор не уверен, какой подход будет лучшим для реального приложения или как определить наилучший подход для моего приложения. Итак, я буду держать вопрос открытым и надеяться на еще несколько обсуждений и/или мнений.

