1

Spring MVC + Hibernate를 사용하여 필자의 애플리케이션을 작성하고있다. 주문 및 품목 (주문 항목)이 2 개 있습니다.최대 절전 모드를 사용하는 지연로드 초기화 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; 

항목 엔티티 :

내가 페이지에서 주문 '/ 주문'페이지에서 주문의 세부 '/ 주문/{ID}을 나열 할
@Entity 
@Table(name = "items") 
public class Item { 

@Id 
@GeneratedValue 
private int 

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

@Column 
private int count; 

/보기 '. 내 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 : lazily 역할 컬렉션을 초기화하지 못했습니다 : ru.drupo.order.domain.Order.items, 초기화 할 수 없습니다. 프록시 - 아니요 세션.

주문 엔티티에 추가하면 주문에 중복 주문이 있습니다. fetch = FetchType.EAGER. 그러나 주문의 세부 사항이 올바르게 표시됩니다.

게으른로드를 초기화하는 방법은 무엇입니까?

답변

4

활성 세션 내에서 트랜잭션 중에 Hibernate.initialize(order.getItems())을 사용하여 비 수화 된 엔티티 또는 콜렉션을 초기화하십시오.

+0

감사합니다. 작동합니다. – Mufanu

관련 문제