Мы работаем с набором веб-сервисов, которые мы разрабатываем.
Один из сервисов извлекает информацию из некоторых таблиц с помощью отображений 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"/>
Foo2
, иFoo3
помечены как EAGER. Я думаю, вы видите прокси дляList<Foo2> list
. Можете ли вы включитьshow_sql
и проверить, запускаются ли запросы для получения отношений EAGER или нет? - person Madhusudana Reddy Sunnapu   schedule 29.03.2016