2013-02-05 1 views
3

에서 특정 속성의로드를 제외 나는 특정 시나리오에서는 엔티티 클래스최대 절전 모드 객체

class B{ 
    @ManyToOne(fetch = FetchType.EAGER) 
    private A a; 
    @ManyToOne(fetch = FetchType.LAZY) 
    private C c; 

}

을 가지고, 나는, 객체 A를로드하지 않습니다. 및 C와 동일합니다. 그러나 이것들은 그 객체를 전혀로드하고 싶지 않은 특정 시나리오입니다.

우리가 최대 절전 모드에서 엔티티 개체의 특정 속성을로드하지 않도록 말할 수있는 방법이 있습니다. {열망 없음/제안 가져 오기. 이 문제가 특정 상황에서만 발생하기를 원합니다.]

참고 : 지금 기준을 사용하여 개체를 가져옵니다. 당신이 당신의 쿼리에 대한 HQL을 사용하고 있기 때문에

답변

2

을 지정할 수 있습니다 fetching strategy at runtime은 "가져 오기"키워드, 아래와 같이 사용하여 조건에 따라 :

List result = sess.createCriteria(B.class) 
    .add(Restrictions.like("name", "yourcondition%")) 
    .setFetchMode("a", FetchMode.EAGER) 
    .setFetchMode("c", FetchMode.LAZY) 
    .list(); 

편집 :

을 FetchMode.EAGER 및 FetchMode.LAZY는 사용되지 않으므로 FetchMode.SELECT 또는 FetchMode.JOIN이 사용됩니다.

List result = sess.createCriteria(B.class) 
    .add(Restrictions.like("name", "yourcondition%")) 
    .setFetchMode("a", FetchMode.JOIN) 
    .setFetchMode("c", FetchMode.SELECT) 
    .list(); 

SELECT 또는 JOIN 확인을 피하려면 here을 선택하십시오.

+0

내 수업에 따라 예제를 수정할 수 있습니까? 죄송합니다, 혼란 스럽네요;) – Reddy

+0

변경되었습니다. "나는 단지 이것을 특정한 경우에만 발생시키고 싶다."- 당신의 구체적인 경우는 무엇입니까? – Jayamohan

+0

오브젝트를 사용하여 B 오브젝트를 검색 할 수 있습니다.이 경우 B 엔티티에 오브젝트를로드 할 필요가 없습니다. – Reddy