Я пытаюсь использовать 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 не вернется?
Или мне для этого нужно вручную запустить и закрыть транзакцию?
Надеюсь, что это имеет смысл! Благодаря.