복붙노트

[SPRING] 최대 절전 모드 콜백 사용의 장점은 무엇입니까?

SPRING

최대 절전 모드 콜백 사용의 장점은 무엇입니까?

나는 Hibernate 콜백 메소드를 사용하는 이점을 이해할 수 없다. 우리가 그것을 가져야하는 이점이나 특정 유스 케이스가 있는가?

public List findRecentRequests(final int offset, final int length)
{
    List list = getHibernateTemplate().executeFind(new HibernateCallback()
    {
        public Object doInHibernate(Session session) throws HibernateException
        {
            Query q = session.createQuery(FIND_RECENT_REQUESTS);
            q.setFirstResult(offset);
            q.setMaxResults(length);
            return q.list();
        }
    });
    return list;
}

또 하나 더 중요한 질문은 쿼리가 값을 반환 할 때마다 HibernateCallback 메서드가 세션을 닫는가하는 것입니다. 나는이 함수를 호출 할 때마다 상태 페이지를 새로 고칠 때마다 여러 번 호출하므로 항상 세션과 쿼리 데이터베이스를 열거 나 메모리에 쿼리 결과를 저장 한 다음이 함수를 호출 할 때마다 결과가 튀어 나오게됩니다 기억으로부터.

나는 읽었다 (참고) :

Spring HibernateTemplate.execute ()는 기본적으로 완료시 열린 세션을 닫는다. 게으른 초기화와 함께 사용하면 다음과 같은 LazyInitializationException을 얻을 수 있습니다

관련 문서 부분에 대한 모든 언급은 높이 평가 될 것입니다.

최신 정보:

제 경우에는 ejb 트랜잭션을 사용하고 그것을 "지원"하도록 설정하고 있습니다. 트랜잭션이 지원되도록 설정되었으므로이 경우를 믿습니다. 옵션이므로 새 세션이 생성 될 때마다 최대 절전 모드로 데이터베이스를 쿼리하여 결과를 얻을 수 있습니다. 병목이 있다면 올바른 가정을 할 수 있을까요?

해결법

  1. ==============================

    1.왜 HibernateCallback을 사용하는지에 대한 당신의 요지. 짧은 대답 - 더 복잡한 최대 절전 모드 기능을 수행하기 위해 현재 트랜잭션으로 바인드 된 세션에 액세스 할 수 있습니다. 대부분의 경우 HibernateTemplate에 대한 간단한 메소드가 충분하지만 때로는 Session으로 내려 가야한다.

    왜 HibernateCallback을 사용하는지에 대한 당신의 요지. 짧은 대답 - 더 복잡한 최대 절전 모드 기능을 수행하기 위해 현재 트랜잭션으로 바인드 된 세션에 액세스 할 수 있습니다. 대부분의 경우 HibernateTemplate에 대한 간단한 메소드가 충분하지만 때로는 Session으로 내려 가야한다.

    퍼즐에는 두 부분이 있습니다.

    첫 번째는 PlatformTransactionManager / TransactionTemplate 또는 @Transactionalannotations를 사용하여 정의되는 트랜잭션 범위입니다. 자세한 내용은 spring docs / google을 참조하십시오.

    두 번째는 트랜잭션 내에서 HibernateTemplate이 약간의 마술을 사용하여 현재 트랜잭션과 상호 작용할 때이다.

    따라서 hibernateTemplate.save ()와 같은 간단한 연산이 트랜잭션에 참여하게됩니다. 귀하의 예와 같이 더 복잡한 것은 또한 거래에 참여할 것입니다. 실제로 hTemplate의 모든 메소드가 참여합니다.

    세션이 닫히는시기에 대해 질문하십시오.

    위의 두 번째 경우에서 유의할 중요한 점은 명시 적 트랜잭션이 없다는 것입니다. 콜백 모드에서 자동 커밋 모드를 사용하면 콜백에서 예외를 저장, 저장, 예외 처리 할 수 ​​있습니다. 첫 번째 저장이 커밋되었을 수 있습니다. 트랜잭션이 없으면 아무런 보장이 없습니다.

    내 충고, 업데이 트를 할 때, 거래를 사용합니다.

    모든 거래 물건이 새로운 것이라면 거래 장에 대한 봄 문서를 확인하십시오.

  2. ==============================

    2.어쨌든 Spring을 사용한다면 리포지토리 또는 서비스 계층에서 선언적 트랜잭션 관리를 사용하여이를 투명하게 처리해야합니다. PlatformTransactionManager 구현은 주어진 지속성 공급자에 적절한 것을 수행합니다.

    어쨌든 Spring을 사용한다면 리포지토리 또는 서비스 계층에서 선언적 트랜잭션 관리를 사용하여이를 투명하게 처리해야합니다. PlatformTransactionManager 구현은 주어진 지속성 공급자에 적절한 것을 수행합니다.

    데이터 액세스 코드가 끝나면 초기화되는 게으른 컬렉션으로 간주하는 것은 나쁜 습관으로 간주됩니다. 일반적으로 앱의 컨트롤러 / 뷰 레이어에 비즈니스 로직이있어 서비스 레이어로 이동해야합니다.

  3. from https://stackoverflow.com/questions/8977121/advantages-of-using-hibernate-callback by cc-by-sa and MIT license