2015-02-24 4 views
0

После того, как я оставил объект своего объекта на бэкэнд (mysql), любой последующий клиентский звонок для обновления списка экипировки (сбор в отеле) впадает в эту ошибку (даже если я маркировать коллекцию быть извлечена нетерпеливый):Обновление списка после повторных попыток: не удалось лениво инициализировать коллекцию, сеанс или сеанс не были закрыты

не удалось лениво инициализировать коллекцию, не сеанс или сеанс был закрыт

Managed боб фронтэнда (с использованием JSF):

public void save() { 
     hotel.setHotelUser(loginBean.getLoggedInUser()); 
     hotel = hopAccess.persistHotel(hotel); 
     addMessage("Hotel saved!"); 
    } 

Entity:

@Entity 
    @Table(name = "hotel") 
    public class Hotel { 

     @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
     @JoinTable(name = "con_hotel_equipment", joinColumns = { 
       @JoinColumn(name = "id_hotel", nullable = false, updatable = false) }, 
       inverseJoinColumns = { @JoinColumn(name = "id_lookup", 
         nullable = false, updatable = false) }) 
     private Set<LookUp> equipments = new HashSet<LookUp>(); 

Услуга:

@Override 
@Transactional(value = "transactionManagerHop", propagation = Propagation.REQUIRES_NEW) 
public Hotel persistHotel(Hotel hotel) { 
    Hotel entity = emHop.merge(hotel); 
    addToCache(entity); 
    return entity; 
} 
+0

Это не проблема JSF. Возможно, вы пытаетесь получить коллекцию (здесь 'wizzardBean.hotel.equipments'), которая должна быть инициализирована лениво на стороне спящего режима. Используйте 'FetchType.EAGER', который, в свою очередь, серьезно обескуражен, используйте подходящие соединения для извлечения или используйте некоторые специфические для поставщика конфигурации (которые мне лично не нравятся). – Tiny

+0

Спасибо, но проверьте мой код - там я уже прихожу к коллекции. –

+0

Да, но он может скрываться где-то в другом месте. Ответ будет сделан в полном стеке стека исключений. – Tiny

ответ

0

Скорее всего, предприятие отделилось от контекста настойчивости, перед обновлением примитива, который вы должны убедиться, что он подключен (например. используя entityManager.findById() или эквивалент)

+0

да, я тоже. поэтому я попробовал перезагрузить объект после сохранения на db. но и это не сработало. такая же ошибка. –

+0

вам нужно перезагрузить только перед обновлением, это то, что вы пробовали? – DaveB

+0

no i reloaded отель сразу после отеля = hopAccess.persistHotel (гостиница); –

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

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