2016-11-02 2 views
0
Map<String, Type> myMap = new HashMap<String, Type>(); 

Query query = session.createQuery("" + 
     "SELECT a " + 
     "FROM Articulo a "); 
List<Object> list = query.list(); 

// Add all query elements to the hashmap 
for (Object entrada : lista) { 
    myMap.put(entrada.getKey(), (Type) entrada); 
// Type someOtherObject = entrada.getReferencedProperty(); 
} 

Type someObject = (Type) myMap.get("someValidKey").getReferencedProperty(); //normal getter 

Здесь someObject выходит null, а объект отсоединен. Однако, если я раскомментирую линию someOtherObject. отношения правильно выбраны.Hibernate, почему мои объекты становятся отстраненными?

Что происходит?

+1

Действительно ли они в одном методе? Это различие очень важно. Я предполагаю, что нет, поскольку 'codLineas' не определен нигде в коде, который вы опубликовали. – rmlan

+0

@rmlan извините, я упрощал код, и я пропустил это. Я отредактировал его сейчас. Код является частью одного и того же метода. – harogaston

ответ

1

Я нашел проблему. Глубоко в моем коде, я имел вызов session.clear(). Это заставило всех моих сущностей отделиться.

+0

, столкнулся с тем же !, 'session.clear()' был вызван в 'flushService', который явно очищал объекты – Kuba

1

Я не вижу всей вашей кодовой базы, но в 95% случаев, когда ваши объекты отсоединяются, потому что вы покидаете контекст транзакции (или вы не находитесь в транзакции в первую очередь).

С related answer:

Как только сессии, используемый для сохранения, загрузки, получить или найти предприятие было закрыто, компания отделилась. Это означает, что он больше не подключен к сеансу и работает как любой другой POJO.

+0

Я не закрываю сессию явно. Есть ли причина, по которой она автоматически закрывается? – harogaston

+0

Или он находится в транзакции, но 'ReferenceProperty' является сложным объектом и не может быть инициализирован по умолчанию. См. «EACHER/LAZY» типа Eetch. Btw 'entrada.getReferencedProperty();' in loop может делать другие запросы, и поэтому вы видите, что этот объект прикреплен. –

+0

Вы используете '@ Transactional'? Вам нужно показать нам больше кода, чтобы помочь вам дальше. –

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