복붙노트

[SPRING] Spring hibernate template은 언제 사용 하는가? 왜?

SPRING

Spring hibernate template은 언제 사용 하는가? 왜?

인사말, 현재 웹 서비스 (CXF + Spring 사용)의 응답이 처리되어 데이터베이스에 저장되는 소규모 웹 서비스 응용 프로그램을 개발 중입니다. 데이터베이스를 사용하기 위해서 나는 Hibernate (3.5)를 사용하고있다. 웹에서 Hibernate + Spring 예제를 브라우징 할 때, 저는 HibernateTemplate의 사용법을 자주 볼 수 있습니다. 그래서 나는이 순간에 대해 약간 혼란스럽고 묻고 싶었습니다 :

Hibernate3 애플리케이션에서 HibernateTemplate을 사용합니까? HibernateTemplate은 언제 당신의 개발 라이프를 더 좋게 만들 수 있으며, 어떤 포인트를 기반으로 결정할 수 있습니까?

감사.

해결법

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

    1.모든 봄 템플릿 (최대 절전 모드, jdbc, 나머지, jpa 등)은 동일한 장점과 단점이 있습니다.

    모든 봄 템플릿 (최대 절전 모드, jdbc, 나머지, jpa 등)은 동일한 장점과 단점이 있습니다.

    프로 : 일반적인 설정 루틴을 수행하고, 상용구를 건너 뛰고 원하는 논리에 집중할 수 있습니다.

    단점 : 응용 프로그램을 스프링 프레임 워크에 단단히 연결해야합니다. 이런 이유로, HibernateTemplate은 더 이상 사용되지 않을 것을 권장한다.

    특히 HibernateTemplate이 코드를 실행 한 후에 세션을 자동으로 열고 닫고 트랜잭션을 커밋하거나 롤백하는 것이었다. 그러나이 모든 것은 Spring의 Declarative Transaction Management를 사용하여 aspect 지향적 인 방식으로 달성 될 수있다.

    참고:

    최신 정보:

    Spring 3.1 (및 이후 버전)에서, HibernateTemplate은 제거되었다. 현재 제안 된 사용 패턴은 Hibernate를 참조하십시오.

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

    2.Spring의 HibernateTemplate이 앞으로 지원되지 않을 것이라는 것을 명심하자. 이것은 Hibernate 4+ 버전이 HibernateTemplate을 지원하지 않는다는 것을 의미한다. 따라서 Sean이 제안한대로 선언적 트랜잭션 관리를 사용하는 것이 좋습니다.

    Spring의 HibernateTemplate이 앞으로 지원되지 않을 것이라는 것을 명심하자. 이것은 Hibernate 4+ 버전이 HibernateTemplate을 지원하지 않는다는 것을 의미한다. 따라서 Sean이 제안한대로 선언적 트랜잭션 관리를 사용하는 것이 좋습니다.

  3. ==============================

    3.HibernateTemplate은 당신의 삶을 편하게 해주는 많은 것들을 캡슐화한다.

    HibernateTemplate은 당신의 삶을 편하게 해주는 많은 것들을 캡슐화한다.

    사용 여부는 귀하의 선택입니다. 그렇다면 Hibernate없이 데이터베이스로 작업 할 수 있습니다. Spring의 JDBC는 매우 훌륭하다. Hibernate를 배우지 않고도 문제를 쉽게 해결할 수 있습니다.

  4. ==============================

    4.OpenSessionInViewFilter 패턴이 효과적입니다. 이것은 모든 요청을 처리하는 동안 Hibernate 세션을 열고 스레드에 바인드합니다. OpenSessionInView는 세션 및로드 기능을 View 렌더링 및 View 레이어로 확장하여 결합 및 복잡성을 줄입니다 ( '그냥 작동'할 수있게 됨으로써).

    OpenSessionInViewFilter 패턴이 효과적입니다. 이것은 모든 요청을 처리하는 동안 Hibernate 세션을 열고 스레드에 바인드합니다. OpenSessionInView는 세션 및로드 기능을 View 렌더링 및 View 레이어로 확장하여 결합 및 복잡성을 줄입니다 ( '그냥 작동'할 수있게 됨으로써).

    제 철학은 aspect 기반 / 선언적 트랜잭션 관리에 실제로 동의하지 않습니다. 저는 중요한 상태 변화 / 수명주기 이벤트를 '명백한'상태로 만들기를 좋아합니다. 분명히해야하기 때문에 - 여러 숨겨진 간접 계층에 약하게 의존하지 않고 작동하지 않을 수도 있습니다.

    디버깅 할 지점을 제공합니다.

    TX 커밋은 한 줄의 코드입니다. 그러나 당신이 중단하고자하는 주요한 것입니다. '트랜잭션 적'선언보다 구문 적으로 더 이상 필요하지 않습니다. 하지만 훨씬 더 명확한 지옥.

    솔직하게 나는 트랜잭션에서 트랜잭션을 제어하기위한 적절한 장소 인 "사용자 명령"또는 "요청"이 잘 구조화되고 잘 식별되고 애플리케이션 내에서 공정하게 명시되어야합니다.

    (aspect 클래스 로딩 작업을하는 데 어려움을 겪었고 처음 시도했을 때 시도해 보았습니다. 잘 평가 된 OO 코드와 비교할 때 애스펙트는 한계 값이 제한적입니다.)

    팁 : 저는 일반적으로 세션을 가져 와서 트랜잭션을 커밋하는 것이 편리하도록 도우미 클래스를 만듭니다.

    HbHelper 또는 somesuch.

  5. ==============================

    5.모든 템플릿은 향후 제공되지 않을 예정입니다. JPA의 표준 인 엔티티 관리자를 사용하는 것이 더 좋습니다.

    모든 템플릿은 향후 제공되지 않을 예정입니다. JPA의 표준 인 엔티티 관리자를 사용하는 것이 더 좋습니다.

  6. from https://stackoverflow.com/questions/4067775/spring-hibernate-template-when-to-use-and-why by cc-by-sa and MIT license