Hibernate возвращает прокси для объекта, установленного в EAGER

Мы работаем с набором веб-сервисов, которые мы разрабатываем.

Один из сервисов извлекает информацию из некоторых таблиц с помощью отображений JPA. Hibernate возвращает объект, и он работает так, как ожидалось.

Другая служба извлекает очень похожий объект и возвращает прокси вместо прочитанного объекта. Выборка настроена на EAGER, поэтому я действительно не понимаю, почему это происходит. Мы попробовали несколько способов преобразовать прокси в реальные данные (что, как я понимаю, не нужно, поскольку установлено значение EAGER), но прокси не конвертируется.

Мы работаем с hibernate 3.5.4-final, если это имеет значение.

Я действительно не знаю, с чего начать, какой-нибудь намек?

@Entity
public class Foo1
{
    @OneToMany(fetch = FetchType.EAGER, orphanRemoval = true, cascade = CascadeType.ALL)
    private List<Foo2> list = new ArrayList<Foo2>();
}

@Entity
public class Foo2
{
    @ManyToOne(fetch = FetchType.EAGER)
    private Foo3 obj;
}

Чтобы получить данные, мы вызываем:

entityManager.find(Foo1.class, id);       

У меня была одна мысль, что, возможно, в Hibernate управляется внутреннее исключение, и поэтому я получаю прокси вместо реального объекта?

EDIT Это конфигурация Hibernate, связанная с проблемой:

<property name="hibernate.max_fetch_depth" value="0"/>
<property name="hibernate.default_batch_fetch_size" value="16"/>
<property name="hibernate.jdbc.batch_size" value="16"/>

person Ignacio Soler Garcia    schedule 29.03.2016    source источник
comment
Можете ли вы опубликовать этот класс сущности и то, как вы получаете сущность.   -  person Madhusudana Reddy Sunnapu    schedule 29.03.2016
comment
@MadhusudanaReddySunnapu: готово, извините. Я должен был добавить это изначально.   -  person Ignacio Soler Garcia    schedule 29.03.2016
comment
И Foo2, и Foo3 помечены как EAGER. Я думаю, вы видите прокси для List<Foo2> list. Можете ли вы включить show_sql и проверить, запускаются ли запросы для получения отношений EAGER или нет?   -  person Madhusudana Reddy Sunnapu    schedule 29.03.2016
comment
@MadhusudanaReddySunnapu: еще раз извините, это свойство obj Foo2, которое проксируется. В любом случае, ваше предложение очень хорошее. Мы собираемся попробовать это, поскольку это также применимо. Спасибо.   -  person Ignacio Soler Garcia    schedule 29.03.2016


Ответы (1)


Мы исправили проблему с вызовом entityManager.unProxy, но она по-прежнему кажется неправильной, так как она уже должна быть не проксирована, поскольку сопоставление установлено на EAGER.

person Ignacio Soler Garcia    schedule 29.03.2016
comment
в идеале он должен загрузить коллекцию EAGER. Удалось ли вам проверить, запускаются ли запросы для получения отношений EAGER или нет? - person Madhusudana Reddy Sunnapu; 29.03.2016
comment
@MadhusudanaReddySunnapu: в этом случае запросы не запускаются. - person Ignacio Soler Garcia; 30.03.2016
comment
@MadhusudanaReddySunnapu: конечно, это упрощенный пример, реальный объект (Foo3) имеет сложное дерево зависимостей. Я не уверен, может ли это иметь последствия или нет. - person Ignacio Soler Garcia; 30.03.2016