Я использую Play Framework v.1.2.6 для проекта, и у меня возникают проблемы с спящим объектом, когда я пытаюсь извлечь их из базы данных. https://www.playframework.com/documentation/1.2.x/jpaОбъекты JPA persistence и Hibernate javassist
У меня есть запрос, который выбирает строки из таблицы mysql, и в результате есть прокси-объекты. См. Изображение ниже.
Я не использую конфигурационный файл Hibernate. Я использую только @Annotations в моем классе модели.
Пример моего запроса:
static List<User> getAllUsersFromAccount(Account account) {
return User.find(
"SELECT u " +
"FROM User u " +
"WHERE u.account=?",
account).fetch();
}
Кто-нибудь знает, как я могу избежать прокси-объектов в результатах запроса?
Теперь мы перебираем массив пользователей и проверяем, является ли сущность экземпляром HibernateProxy. Мы не хотим этого делать, потому что, возможно, у нас такая же проблема и для других запросов.
private static <T> T initializeAndUnproxy(T entity) {
Hibernate.initialize(entity);
if(entity instanceof HibernateProxy) {
entity = (T)((HibernateProxy)entity).getHibernateLazyInitializer().getImplementation();
}
return entity;
}
Св хороший вопрос с или без контекста, но не могли бы вы объяснить, почему так или иначе вы спрашиваете об этом? Должно ли позднее предотвращать ленивые ошибки init? – Gimby
Когда мой код пытается сериализовать класс, я получаю такие ошибки, как «Попытка сериализации java.lang.Class: org.hibernate.proxy.HibernateProxy. Забыл зарегистрировать адаптер типа?». У нас есть запрос и сериализация по всему проекту и прекрасно работает. Мне кажется, что это происходит только с результатом этого пользовательского запроса, который очень странный. –
Это похоже на то, что в объекте есть что-то, что невозможно для сериализации. У вас есть какие-либо свойства, которые сделаны Transient (как в: не сохраняются)? – Gimby