2011-01-04 3 views
4

나는 lazy = "false"및 batch-size = "100"을 지정한 엔티티가 있습니다. 그것은 잘 작동하지만 일부 다른 시나리오에서 배치 - 크기를 제거하고 lazy = "true"를 설정하려고합니다. 내가 hbm 파일을 변경하면 다른 응용 프로그램에 영향을줍니다. hql을 실행하기 전에 현재 세션에 대한 엔티티의 속성을 변경할 수있는 방법이 있습니까?런타임시 최대 절전 모드 매핑 속성을 변경하는 방법

답변

8

HQL 또는 조건 쿼리를 통해 런타임에 가져 오기 전략을 변경할 수 있습니다 (지연 여부). ,

from Cat as cat 
inner join fetch cat.mate 
left join fetch cat.kittens 

대신 기준 쿼리에 대한 기준 API를 Hibernate Doku - 15.3. Associations and joins

사용 Criteria.setFetchMode(..)를 참조 예 :

List cats = sess.createCriteria(Cat.class) 
.add(Restrictions.like("name", "Fritz%")) 
.setFetchMode("mate", FetchMode.EAGER) 
.setFetchMode("kittens", FetchMode.EAGER) 
.list(); 
을 HQL에서 당신은 가입 모음의 값을 초기화하는에 가입, 예를 을 불러오는 데 사용할 수 있습니다

최대 절전 모드 Doku for this : 16.5. Dynamic association fetching

2

Fetching Profiles을 사용하여 가져 오기 전략을 변경할 수 있습니다.

+1

내가 아는 바에 따라 배치 크기를 동적으로 변경할 수있는 방법이 없습니다. SessionFactory를 생성하는 데 사용 된 Configuration 객체를 수정하여 설정시 변경할 수 있습니다. org.hibernate.cfg.Configuration.getClasses() 및 org.hibernate.mapping.Collection.setBatchSize()를 참조하십시오. – snorbi

+0

가져 오기와 관련된 추가 정보는 http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#performance-fetch에서 확인할 수 있습니다. – snorbi