2011-01-12 1 views
8

У меня есть приложение Spring 3 + JPA 2.0. В моем @Controller мне нужен инициализированный объект, но у меня есть прокси, мне нужно его инициализировать программным путем. Мне нужна функциональность, похожая на org.hibernate.Hibernate.initialize(Object).Как принудительно инициализировать прокси-сервер Hibernate JPA для его использования в вызове JSON

Может кто-то помочь. Объект используется для операций AJAX. Если свойства являются прокси-серверами, я не могу отправить их как JSON

ответ

4

Нет опции JPA, насколько мне известно. Вы должны использовать Hibernate.initialize(..).

Фактически, когда я взглянул на реализацию спящего режима, ленивые коллекции, по-видимому, инициализируются во многих случаях, чего не ожидалось бы. Как entityManager.contains(..) и Persistence.getPersistenceUtil().isLoaded(...). Попробуйте, но я не думаю, что вы должны полагаться на такие детали реализации.

+0

Да, спасибо, хотя это могло быть так. Я не хотел создавать дополнительные объекты, а затем отправлять их в представление. Поскольку мы еще на ранней стадии проекта, мы решили перейти в спящий режим, поскольку причины JPA не застряли :). Теперь для всех пользователей спящего режима просто используйте 'Hibernate.initialise (..)' – pmanolov

0

Мы делаем аналогичную вещь в нашем приложении, и мы сочли полезным разделить наши объекты сущности базы данных и иметь еще одну группу классов для вывода JSON.

Если вы используете структуру JSON, что только инспектирует свой объект и Патрон некоторой JSON для каждого и каждое свойство на объекте, то возможность иметь такие объекты, как:

PersonEntity - класс, управляемый JPA и PersonJsonOutput - класс, специально предназначенный для выхода JSON

Возможно, в долгосрочной перспективе может быть более безопасным. Это позволяет вам иметь изменения в базе данных, которые автоматически не отражаются в вашей службе JSON, возможно, вам захочется обновить вашу службу JSON, возможно, вместо того, чтобы разорвать старые версии, как только ваш объект базы данных изменится.

Это также дает вам больший контроль над вашей продукции JSON в терминах скажем форматов дат или вынуждающих номеров в базе данных, чтобы быть строки в вашем JSON, и т.д. ...

Этот ответ действительно зависит только от того, как вы» заново создавая ваш JSON, но похоже, что ваша библиотека делает некоторые интроспекции.

0

Я знаю, что это поздно, и ответ будет принят, а другой стандарт JPA способ для вызова метода размера() в списке, который вы хотите инициализировать до возвращения объекта из DAO:

Object.getList().size(); 

Это избавляет вас от необходимости обманывать и использовать механизм инициализации, специфичный для реализации.

 Смежные вопросы

  • Нет связанных вопросов^_^