2017-01-11 4 views
0

Я хотел бы загрузить House объект из базы данных, как это:Загрузка многие к одному классу - Hibernate

House temp = DataBaseConnector.getInstance().findHouseByID(id); 
System.out.println(temp.getType().getName()); 

но в любое время я пытаюсь получить доступ getType() поле Я получаю сообщение об ошибке:

Exception in thread "AWT-EventQueue-0" org.hibernate.LazyInitializationException: could not initialize proxy - no Session at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:165) at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:286) at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185) at mapping.Type_$$_jvstd13_0.getName(Type_$$_jvstd13_0.java) ..

findHouseById функция выглядит следующим образом:

public static House findHouseByID(Integer id) { 
    Session session = getSessionFactory().openSession(); 
    House e = (House) session.load(House.class, id); 
    session.close(); 
    return e; 
} 

Любая помощь будет Оцените :)

ответ

0

Как указано в исключении, у вас нет сеанса (спящего режима) в точке, которую вы вызываете temp.getType(), потому что вы закрыли сеанс после загрузки вашего объекта по методу findHouseByID.

Вот некоторая информация об объекте состояниях:

https://docs.jboss.org/hibernate/core/3.3/reference/en/html/objectstate.html

В связи с этим вы получите LazyInitializationException, потому что спящий режим пытается получить доступ к базе данных для распространения не инициализировано поля type на отдельный объекте.

Либо изменить выборки стратегию поля type к EAGER поэтому нет доступа к базе данных не требуется в данный момент, посмотрите здесь:

https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/FetchType.html

Или вы должны увеличить объем вашей сессии (вызовите getType перед закрытием сессии).

+0

Я пытался добавить EAGER принести как это: @ManyToOne (скачивает = FetchType.EAGER) \t @JoinColumn (имя = "TYPE_ID") \t общественного типа GetType() { \t \t тип возвращаемого значения; \t} Но это не сработало. –

+0

Не могли бы вы разместить свои родственные классы моделей? –

+0

Btw, возможно ли, что вы перепутали доступ к собственности/поле? Вы когда-нибудь пытались аннотировать поле вместо геттера? http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-mapping-entity –

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