Как заставить инициализировать прокси Hibernate JPA для использования его в вызове JSON
У меня есть приложение Spring 3 + JPA 2.0. В моем @Controller
Мне нужен инициализированный объект, но у меня есть прокси, я должен иметь возможность инициализировать его программно. Мне нужна функциональность, аналогичная org.hibernate.Hibernate.initialize(Object)
,
Может кто-нибудь помочь. Объект используется для операций AJAX. Если свойства являются прокси, я не могу отправить его как JSON
3 ответа
Нет JPA вариант, насколько мне известно. Вы должны использовать Hibernate.initialize(..)
,
Фактически, когда я взглянул на реализацию в спящем режиме, ленивые коллекции, по-видимому, были инициализированы во многих случаях, чего и не ожидали. подобно entityManager.contains(..)
а также Persistence.getPersistenceUtil().isLoaded(...)
, Попробуйте, но я не думаю, что вы должны полагаться на такие детали реализации.
Я знаю, что уже поздно, и ответ принят, но другой стандартный способ JPA - вызвать метод size() в списке, который вы хотите инициализировать, до возвращения объекта из DAO:
Object.getList().size();
Это избавит вас от необходимости обманывать и использовать механизм реализации для инициализации
Мы делаем аналогичную вещь в нашем приложении, и мы сочли полезным разделить наши объекты сущностей базы данных и получить еще одну группу классов для вывода JSON.
Если вы используете инфраструктуру JSON, которая просто проверяет ваш объект и отбирает некоторый JSON для каждого свойства объекта, тогда у вас есть возможность иметь такие объекты, как:
PersonEntity - класс, управляемый JPA и PersonJsonOutput - класс, специально разработанный для вывода в формате JSON
Может быть безопаснее в долгосрочной перспективе. Это позволяет вам вносить изменения в базу данных, которые не отражаются автоматически в вашей службе JSON, возможно, вы захотите создать версию своей службы JSON, а не ломать старые версии, как только ваша сущность базы данных изменится.
Это также дает вам больший контроль над выводом JSON с точки зрения, скажем, форматов даты или преобразования чисел в базе данных в строки JSON и т. Д.
Этот ответ на самом деле зависит только от того, как вы генерируете свой JSON, но похоже, что ваша библиотека занимается самоанализом.