Боюсь, ответ таков: начните писать код ООП.instanceof
летит перед лицом полиморфизма.Клиенты класса не должны никогда заботиться о том, к какому конкретному подтипу / реализации они обращаются.
Если вы использовали наследование сущностей и теперь должны использовать instanceof
в своем коде, ваш дизайн, скорее всего, ошибочен.Hibernate во многих случаях использует прокси, и вы не можете полагаться на instanceof
или .getClass()
, всегда возвращающие точный класс вашей сущности.
Если, с другой стороны, вы использовали instanceof
из любопытства и были удивлены, обнаружив, что он действительно возвращает false
, не бойтесь, все вызовы, которые вы делаете этому прокси-серверу сущности, по-прежнемуполиморфный.
Причина сбоя instanceof
заключается в том, что Hibernate должен инициализировать свойство lazy с что-то , и он не может определить тип этого что-то до свойствазагружен.Если вы настаиваете на использовании instanceof
, вы можете попробовать включить улучшение сущности.