복붙노트

[SPRING] DAO에서 Spring MVC를 Hibernate와 함께 사용하는 올바른 방법은 무엇인가, 서비스 계층 아키텍처

SPRING

DAO에서 Spring MVC를 Hibernate와 함께 사용하는 올바른 방법은 무엇인가, 서비스 계층 아키텍처

내 DAO 클래스에 대해 Hibernateaosupport와 함께 Spring MVC를 사용하고있다. 서비스 계층 또는 DAO 계층 중 어디에서 트랜잭션을 시작할지 여기에서 혼란 스럽습니까?

내보기는 서비스 계층과 상호 작용합니다. DAO는 서비스에 주입됩니다.

DAO, 서비스 계층 아키텍처에서 Hibernate와 Spring MVC를 사용하는 올바른 방법은 무엇입니까?

해결법

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

    1.IMHO 트랜잭션은 서비스 계층으로 이동해야합니다. 일반적으로 하나의 비즈니스 트랜잭션은 여러 개의 쿼리와 업데이트로 구성됩니다. @Transactional을 DAO 레이어에만 배치하면 각 쿼리와 업데이트가 별도의 트랜잭션에서 실행되므로 효과적으로 트랜잭션의 목적을 무효화합니다.

    IMHO 트랜잭션은 서비스 계층으로 이동해야합니다. 일반적으로 하나의 비즈니스 트랜잭션은 여러 개의 쿼리와 업데이트로 구성됩니다. @Transactional을 DAO 레이어에만 배치하면 각 쿼리와 업데이트가 별도의 트랜잭션에서 실행되므로 효과적으로 트랜잭션의 목적을 무효화합니다.

    그러나 서비스가 @ 트랜잭션 인 경우 각 데이터베이스 상호 작용은 웹 계층이 서비스 계층에 들어갈 때 시작된 하나의 기본 트랜잭션과 조인합니다. 이 경우 웹 레이어가 여러 서비스 메소드를 실행하는 경우 각 서비스 메소드는 별도의 트랜잭션에서 실행됩니다 (동일한 문제가 한 레벨 위로 이동 됨). 그러나 @Transactional을 웹 레이어에 배치하면 N + 1 문제와 같이 예기치 않은 부작용이 발생할 수 있습니다. 따라서 웹 레이어에서 호출되는 하나의 서비스 메서드에서 하나의 비즈니스 트랜잭션을 유지하려고 시도하십시오.

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

    2.분명히 DAO 레이어. 데이터 액세스 레이어에 연결하는 모든 것은 DAO 레이어에 있어야하며 @Repository로 주석 처리되어야하며 (@Service로 주석 처리 된) 서비스에는 DAO 인스턴스에 대한 핸들이 있어야합니다.

    분명히 DAO 레이어. 데이터 액세스 레이어에 연결하는 모든 것은 DAO 레이어에 있어야하며 @Repository로 주석 처리되어야하며 (@Service로 주석 처리 된) 서비스에는 DAO 인스턴스에 대한 핸들이 있어야합니다.

    당신이 트랜잭션을 시작한다면 DAO는 본질적으로 원자가되어야한다고 언급했던 나의 이전 진술을지지하는 제 생각에는 서비스 계층에 있어야합니다.

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

    3.서비스 레이어, DAO 레이어, 엔티티 및 컨트롤러에 대한 완전한 정보가 있습니다. 그것은 각 모듈에 대한 간단한 설명과 함께 전체 튜토리얼을 가지고 있습니다.

    서비스 레이어, DAO 레이어, 엔티티 및 컨트롤러에 대한 완전한 정보가 있습니다. 그것은 각 모듈에 대한 간단한 설명과 함께 전체 튜토리얼을 가지고 있습니다.

    사이트 : Hibernate CRUD를 이용한 Spring MVC

    또는 YouTube 채널을 방문 할 수 있습니다 : Spring MVC with Hibernate CRUD VIDEO

  4. from https://stackoverflow.com/questions/8993318/what-is-the-right-way-to-use-spring-mvc-with-hibernate-in-dao-service-layer-arc by cc-by-sa and MIT license