2013-08-06 2 views
0

Spring의 Hibernate Template을 사용하여 일대 다 관계를 게으른 초기화하려고하고있다.Hibernate Lazy 로딩과 초기화

다음 가이드를 읽었습니다. 상기 코드는 2 세션 및 2 SQL 문을 사용

/** 
    * {@inheritDoc} 
    */ 
public Child getChildByIdWithoutToys(Long childId) { 
    return getHibernateTemplate().get(Child.class, childId); 
} 

/** 
    * {@inheritDoc} 
    */ 
public Child getChildByIdWithToys(Long childId) { 
    Child child = getChildByIdWithoutToys(childId); 
    /** 

이러한 코드에 대한 참조 http://dinukaroshan.blogspot.sg/2012/08/lazyeager-loading-using-hibernate-by.html

SQL (노출) 한 세션 한 SQL이 수행 할 수있는 방법이 있는가 문 (hibernate_showsql = true)

답변

1

이 모든 것은 가장 좋은 설명이 아닌 질문에 게시 한 예에 적용된 기묘하고 더러운 해결책입니다.
이 코드는 1 세션과 2 개의 SQL로 수행 할 수 있습니다 (두 개의 별도 명령을 실행 중이므로이 코드는 더 작습니다). 간단히 말해서, 당신은 당신의 sessionFactory를 스프링 - 컨텍스트로부터 얻고, 세션을 열고, 코드를 수행하고 세션을 닫아야한다. 거래는 봄에 의해 직접 관리됩니다! 메인의 은 다음을 수행합니다.

0

모든 것을 하나의 세션으로 유지하려면이 메서드를 하나의 세션에서 호출해야합니다. 이를 수행하는 가장 쉬운 방법은 Spring의 선언적 트랜잭션 지원을 사용하는 것입니다.이 방법은 @Transactional으로 최상위 메소드 (전체 지속성 시스템을 입력 할 수있는 곳)를 표시하는 것이 가장 좋습니다. 이러한 조회 메소드는 새 트랜잭션을 작성하는 대신 호출자로부터 트랜잭션을 "상속 (inherit)"합니다.

관련 문제