Как реализовать на равных с Hibernate, не рискуя потерять симметричное свойство?

После прочтения (опять же, следовало бы сделать это давным-давно) правильной реализации equals и hashcode я пришел к следующим выводам, которые работают для меня:

Если предварительно JDK 7: Предпочитаю использовать Apache Commons EqualsBbuilder и HashCodelder. (или гуава). Их Javadocs содержат примеры того, как правильно их использовать.

Если JDK 7 ++: Используйте новый служебный класс Objects

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

Но, как я понимаю, при этом возникает другая потенциальная проблема: причина использования getClass заключается в обеспечении симметричного свойства контракта equals. JavaDocs:

*It is symmetric: for any non-null reference values x and y, x.equals(y) 
 should return true if and only if y.equals(x) returns true.*

И используя instanceof, это 'Можно не быть симметричным. Пример: B расширяет A. A 's равно экземпляру проверки A. B 's равно экземпляру проверки B. Приведите A a и B b:

a.equals (b) -> верно б.экв. (а) -> ложный

Как реализовать на равных с Hibernate, не рискуя потерять симметричное свойство? Кажется, яя не безопасен при использовании getClass, и яне безопасно при использовании instanceof?

Является ли ответом никогда не добавлять значимые элементы в подклассы, а затем безопасно использовать instanceof (для hibernate, то есть)?

Источники, которые я прочитал:

Какие проблемы следует учитывать при переопределении equals и hashCode в Java?

Пункты 7 и 8 в превосходной книге Джоша Блоха "Эффективная Ява ",http://web.archive.org/web/20110622072109/http://java.sun.com/developer/Books/effectivejava/Chapter3.pdf

О Java 7:http://www.javacodegeeks.com/2012/11/guavas-objects-class-equals-hashcode-and-tostring.html

Ответы на вопрос(3)

Ваш ответ на вопрос