У меня есть функция, которая просто получает местоположение по ID:Hibernate не приносит полей типа Wrapper сохраняющегося объекта при использовании нагрузки (класс, идентификатор)
public Location getLocationById(Long idSearchedLocation){
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Location location = null;
try{
location = (Location) session.load(Location.class, idSearchedLocation);
//System.out.println(location.getLat() + " " +this.getClass().getName());
} catch (HibernateException e) {
e.printStackTrace();
session.getTransaction().rollback();
}catch(Exception e){
e.printStackTrace();
}
session.getTransaction().commit();
return location;
}
В другой функции я получаю объект местоположения и I пытаюсь получить доступ к location
полей:
Location location = mainManager.getLocationById(idSearchedLocation);
System.out.println(location.getLat() + " " +this.getClass().getName());
И тогда я получаю исключение после того, как я получаю возвращенное местоположение, когда я пытаюсь напечатать location.getLat()
:
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
Странно, почему я получаю эту ошибку, потому что объект Location имеет соседние коллекции и ассоциированные объекты: только String
и Float
типов.
Если я раскомментирую строку, которая печатает location.getLat()
в функции dao, все работает так, как ожидалось, загружает все (без исключения, и печать преуспевает). Но почему Hibernate не загружает поля объекта в первом случае?
ОБНОВЛЕНИЕ
@Entity
@Table(name="location")
public class Location {
private Long id;
private String name;
private String country;
private String address;
private Float lat;
private Float lng;
//getters and setters
}
Отправьте свой объект местоположения, пожалуйста. –
@Ean Я обновил сообщение. –
Hibernate загружает примитивные типы по умолчанию, если вы не отметите их как ленивые. Посмотрите на своих геттеров, чтобы убедиться, что вы отметили их как ленивые. Это можно сделать для примитивов с использованием аннотации @Basic. –