LazyInitializationException с использованием HibernateDaoSupport - PullRequest
1 голос
/ 17 февраля 2011

Я пытаюсь использовать HibernateDaoSupport, но я застреваю с проблемой org.hibernate.LazyInitializationException.

Это пример того, что я хочу сделать;

public class MyDaoImpl extends HibernateDaoSupport {

    public Set<Long> getCoreItemIdsForCustomerIds(Set<Long> customerIds) {
        Set<Long> itemIds = new HashSet<Long>();
        for (Long customerId : customerIds) {
            Customer customer = getCustomerWithId(customerId);
            itemIds.addAll(getItemIdsFromItems(customer.getCoreItems()));
        }
        return itemIds;
    }

    private Customer getCustomerWithId(Long customerId) {
        return getHibernateTemplate().get(Customer.class, customerId);
    }

    private Set<Long> getItemIdsFromItems(Set<Item> items) {
        Set<Long> itemIds = new HashSet<Long>();
        for (Item item : items) {
            itemIds.add(item.getId());
        }
        return itemIds;
    }
}

У покупателя есть коллекция предметов. Сущность извлекается лениво, поэтому, я думаю, проблема в том, что getCustomerWithId завершает сессию, и клиент отключается. Поэтому, когда customer.getCoreItems () вызывается, генерируется исключение.

Кто-нибудь знает, как я могу использовать HibernateDaoSupport и держать сеанс открытым до тех пор, пока getCoreItemIdsForCustomerIds не вернется?

Или мне для этого нужно вручную запустить и закрыть транзакцию?

Надеюсь, что это имеет смысл! Благодаря.

1 Ответ

1 голос
/ 17 февраля 2011

Использовать фильтр OpenSessionInView .Сессия будет открыта на время фазы запроса-ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...