2014-01-31 2 views
-1

Если мы аннотировали свойство как ленивую инициализацию true, мы не можем получить доступ к свойству. Например:Hibernate ленивое требование инициализации

@ManyToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name="orgTypeID") 
    private OrganizationType type; 

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

Нам не нужно присоединяться. оцените, если вы можете это объяснить.

+0

Почему вы не можете получить к нему доступ с помощью геттера? Вы получаете какую-то ошибку? Что вы подразумеваете под _we не нужно присоединяться? Вам нужно всего лишь сопоставить идентификатор 'OrganizationType'? –

+0

, если мы попытаемся получить к нему доступ этот объект null. но на самом деле есть данные. – user2622132

+0

, когда я отлаживаю значение типа организации, является «org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer» – user2622132

ответ

0

Объекты с «ленивой» выборкой не будут выбраны, если их не попросят.

Для того, чтобы ожидание происходило лениво, объект должен оставаться в контексте сеанса. Если вы попытаетесь получить доступ к этому ленивому свойству за пределами контекста сеанса (отдельный объект), на сервере появится ошибка lazyinitialization - нет проблемы с сеансом.

Чтобы вернуть объект в сеанс, вам нужно открыть сеанс и объединить объект в сеанс и попытаться извлечь свойство lazy.

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

Session session = factory.getSession(); 

Class clas = session.find(Class.class, id); 

clas.type();//here you are anticipating that it will be used somewhere else, so force it to load 

session.close(); 
// clas.type(); // Hypothetically, if you try to load the type here, this may not work as the session is closed before this line. the object is now in detached state. 

Надеюсь, он ответит на ваш вопрос.

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