Иногда хибернейт возвращает прокси объект, заместо инстанса нашего класса, подробнее о механизме можно прочитать в блоге Vlad Mihalcea https://vladmihalcea.com/how-does-a-jpa-proxy-work-and-how-to-unproxy-it-with-hibernate/
в более старых версия хибернэйта чем 5.2.10 нет метода unproxy и получить исходный класс без него можно только хитрым трюком:
public class HibernateUtils {
/**
* Явная инициализация lazy сущности
*
* @param entity lazy сущность
* @return инициализированная сущность
*/
public static <T> T unProxy(T entity) {
if (entity instanceof HibernateProxy) {
entity = (T) ((HibernateProxy) entity).getHibernateLazyInitializer()
.getImplementation();
}
return entity;
}
/**
* Явная инициализация lazy сущности и ее преобразование к указанному классу
*
* @param entity lazy сущность
* @param clazz класс для преобразования
* @return преобразованая сущность
*/
public static <T, Y> Y unProxyToClass(T entity, Class<Y> clazz) {
return (Y) HibernateUtils.unProxy(entity);
}
}