2013-10-17 3 views
0

내 겨울잠 POJO 클래스입니다.최대 절전 모드로 사용자의 부모 클릭으로 하위 항목로드?

@Entity 
@Table(name = "PARENT") 
public class Parent { 

    @Id 
    private int id; 

    @Column(name = "NAME") 
    private String name; 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "parent") 
    private List<Child> children; 

    // Getters and Setters... 
} 

@Entity 
@Table(name = "CHILD") 
public class Child { 

    @Id 
    private int id; 

    @Column(name = "NAME") 
    private String name; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "PARENT_ID", nullable = false) 
    private Parent parent; 

    // Getters and Setters... 
} 

여기에는 최대 절전 모드에 대해 배운 두 가지 방법이 있습니다.

Session session = sessionFactory.openSession(); 
    List<Child> children = null; 

    try { 
    children = session.createCriteria(Child.class, "C") 
        .add(Restrictions.eq("C.parent", parent) 
        .list(); 
    } finally { 
    session.close(); 
    } 

또는

Session session = sessionFactory.openSession(); 
    List<Child> children = null; 

    try { 
    session.refresh(parent); 
    children = parent.getChildren(); 
    } finally { 
    session.close(); 
    } 

새로 고침을 사용하고 나중에 하나, 내가 최대 절전 모드로 실험 실수 동안 발견 (P 난 아직도 멍청한 놈이야).

Q.1 가장 좋은 방법은 무엇입니까?

Q.2 게이 터 메소드를 호출하여 모든 하위 항목을 가져올 수있는 경우 Criteria API 또는 HQL을 사용하여 게으른로드 멤버를 얻는 이유는 무엇입니까?

답변

1

부모 개체가 세션에 연결된 경우에만 getter 메서드를 호출하여 자식을로드 할 수 있습니다. 위의 코드에서 refresh이 호출하는 것) 또는 저장 또는 업데이트를 통해 세션에 객체를 첨부 할 수 있습니다. 자세한 설명은 설명서를 참조하십시오. 다음 코드처럼 :

이 작업은 기본적으로 기준 API (사용한 방식)와 같습니다. Criteria와 HQL은 다른 많은 것들을 위해 사용됩니다. 귀하의 경우에는 사용에 대해 아무런 언급이 없습니다.

+0

또한 의심의 여지가 있습니다! 잘못된 목적으로 refresh() 메서드를 사용하고 있습니까? 다른 용도로 사용됩니까? 따라서 프로덕션 용도로이 방법을 사용할 수 있습니까? – Akshat

+0

새로 고침 설명서는 [this] (http://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/Session.html#refresh (java.lang.Object))를 참조하십시오. 당신은 그것을 올바르게 사용하고 있습니다. 그리고 네.이 접근법은 절대적으로 생산을 위해 사용될 수 있습니다. (이 경우에는 새로 고치지 말아야 할 문서에서 언급했듯이 장기 실행 세션이 없다면). –

+0

자, 부모와 자식을위한 스윙 GUI를 만들 때 내 세션이 시작되고 프레임이 보이도록 설정하기 전에 GUI가 완료되면 닫힙니다. 장기 실행 세션이라고할까요? – Akshat