2014-01-20 2 views
0

컨테이너 관리 트랜잭션을 이해하려고 시도했습니다. 아래에 언급 된 코드입니다.Hibernate lazy loading 작동하지 않음, 강제로 열심히로드해야 함

@Transactional 
    public void saveFees(FeesVO vo) throws Exception { 
     logger.info(" --- Finding User with Id ---- " + vo.getUserId()); 
     User user = userDao.getUserById(Long.parseLong(vo.getUserId())); 
     logger.info(" ---- User Found with Id --- " + user); 
     userDao.saveFees(CommonUtil.convertFees(vo, user)); 
     throw new Exception(" business exception "); 
    } 

트랜잭션이 커밋되면 저장 방법 후에 비즈니스 예외가 발생할 수 있으므로 트랜잭션이 롤백 될 것으로 예상 했습니까? 내 이해가 맞습니까?

+1

확인 된 예외로 인해 롤백이 발생하지 않습니다. 설명서를 확인하십시오. 나는 또한 질문 제목과 실제 ​​질문의 관계를 이해하지 못한다. –

+0

예. 내게 진짜 문제는 요금은 지연된 사용자 엔티티를 가진 콜렉션이다. 사용자를 가져 오는 데는 수수료 오브젝트를 가져올 필요가 없습니다. 왜 hibernate가 사용자 객체와 관련된 수수료 객체를 가져 오기 위해 쿼리를 실행하는 이유는 무엇입니까? – user2775185

+0

질문을 수정하거나 더 자세히 설명해 주실 수 있습니까? 제목 (그리고 지금 귀하의 의견) * 게으른 로딩 * 언급하지만 질문 본문은 순전히 트랜잭션 관리에 관한 것입니다. –

답변

2

RuntimeException에만 봄의 트랜잭션에 대한 롤백이 발생합니다. 확인 된 Exception은 롤백을 트리거하지 않습니다. @Transactional(rollbackFor = Exception.class)을 통해이를 변경할 수 있습니다.

+0

감사합니다. 코드가 서비스 계층에서 작성된 경우, 시도해야 컨트롤러 쪽 (나는 봄 mvc 사용하고있다) 잡으려고합니다. – user2775185

관련 문제