2010-12-07 3 views
16

간단한 질문이 있습니다. "선택" 의미 "게으른 부하 모든 컬렉션과 실체"Fetching Strategies에 따라최대 절전 모드 XML 매핑 : 게으른 거짓 또는 반입 선택?

<many-to-one name="employee" 
    class="com.myapp.Employee" 
    cascade="merge" 
    lazy="false" 
    fetch="select"> 
<column name="employee_id" 
    sql-type="bigint" 
    not-null="true"/> 
</many-to-one> 

는 = 가져 오지 않는다 : 나는 우리의 프로젝트에이 최대 절전 모드 설정을 발견했다. 그러나 을 작성하여 게으른 = "거짓" 게으른로드하지 마십시오. 위의 설정은 "지연로드 사용 안함. 지연로드 사용"이라고 말합니다. 실제로이 속성은 게으른로드 된 것을 의미합니까?

는 그래서는 그 설정 단축 할 수있다 :

<many-to-one name="employee" 
    class="com.myapp.Employee" 
    cascade="merge" 
    fetch="select"> 
<column name="employee_id" 
    sql-type="bigint" 
    not-null="true"/> 
</many-to-one> 

을하지만 =이 기본 모드 "를 선택"가져 되지 않는 이유는 무엇입니까? 그래서 사실상 같은 설정을 선언 할 수 있습니다 :

<many-to-one name="employee" 
    class="com.myapp.Employee" 
    cascade="merge"> 
<column name="employee_id" 
    sql-type="bigint" 
    not-null="true"/> 
</many-to-one> 

정확합니까? 잘못된? 아이디어? 감사합니다

내가 게으른 로딩을 사용하려면, 내가 게으른 = "true"를 제거 게으른 = "false"를를 추가해야합니까?

답변

38

가져 오기 모드와 가져 오기 시간이 완전히 겹치지 않는 개념이라고 생각합니다.

Lazy="true|false"은 연관이 열정적으로 또는 필요시로드되는지 여부를 제어합니다.

fetch="select|subselect|join|batch"로드 할 필요가있을 때 해당 엔티티 또는 컬렉션이로드되는 방식을 제어합니다.

그래서, fetch="select"을 가지고, 귀하의 질문에 대답하는 것은 의미

거짓 "이". 두 번째 SELECT가 명시 적으로 게으른 = 지정하여 lazy 페칭을 사용 불가능하게하지 않는 관련 엔티티 또는 콜렉션을 검색하는데 사용된다 "를 두 번째 선택은 협회에 액세스 할 때만 실행됩니다. " (http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html#performance-fetching)

이것은 게으른로드가 사용 불가능하다는 것을 의미하지 않습니다! 이는 lazy="true|false" 플래그로 제어됩니다. lazy="true"fetch="select"으로 Hibernate는 콜렉션을 lazy로드 할 것이고 select로로드 할 것이다. lazy="false"을 설정하면 동일한 선택이 실행되고 차이는 열심히 실행됩니다. 희망이 의미가 있습니다.

뿐만 아니라 여기에 보라 : http://community.jboss.org/wiki/AShortPrimerOnFetchingStrategies

0

게으른 것으로 설정하면 외부 맵이 필요하지 않은 경우 직원을 선택하지 않습니다. 가져 오기는 필요한 경우 직원에게 쿼리하는 방법을 보여줍니다.

+0

두 속성을 추가하는 것은 중복 아닌가요? 그들은 서로 부인하지 않지, 그렇지? – chris

관련 문제