1

Я пишу свое приложение, используя Spring MVC + Hibernate. У меня есть 2 объекта: заказ и предметы (элементы заказа).Lazy инициализация загрузки с использованием hibernate 4

сущность заказа:

@Entity 
@Table(name = "orders") 
public class Order { 

@Id 
@GeneratedValue 
private int id; 

@Column(name = "time") 
private long time; 

@OneToMany(mappedBy = "order") 
private List<Item> items; 

Item лицо:

@Entity 
@Table(name = "items") 
public class Item { 

@Id 
@GeneratedValue 
private int 

@ManyToOne(targetEntity = Order.class) 
private Order order; 

@Column 
private int count; 

Я хочу перечислить заказы на странице '/ заказов', и детали заказа в странице «/ заказы/{ID}/просмотр ».

В моем DAOImpl я пишу код ниже:

public List<Order> view() { 
    return sessionFactory.getCurrentSession() 
      .createCriteria(Order.class) 
      .addOrder(org.hibernate.criterion.Order.desc("time")) 
      .list(); 
} 

Этого код возвращает список всех заказов. Но если я попытаюсь увидеть детали заказа, у меня есть исключение: org.apache.jasper.JasperException: org.hibernate.LazyInitializationException: не удалось лениво инициализировать коллекцию роли: ru.drupo.order.domain.Order.items, не удалось инициализировать proxy - нет сеанса.

В списке есть дубликаты заказов, если я добавляю к объекту заказа fetch = FetchType.EAGER. Но детали заказа отображаются правильно.

Как я могу инициализировать ленивую загрузку?

ответ

4

В процессе транзакции (в рамках активной сессии) используйте Hibernate.initialize(order.getItems()) для инициализации негидратированных объектов или коллекций.

+0

Спасибо, это работает. – Mufanu

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