less than 1 minute read

  • 아래 글은 ddd Start를 읽고 일부 정리한 내용입니다.

JPA 를 이용한 리포지터리 구현

  • 도메인 모델과 리포지터리를 구현 = JPA
  • 자바의 ORM 표준인 JPA를 이용해서 리포지터리와 애그리거트를 구현하는 방법에 대한 알아보자.

리포지터리 기본 기능은 다음 두 가지를 따른다.

  • 아이디로 애그리거트 조회(findById)
  • 애그리거트 저장하기(save)

인터페이스는 애그리거트 루트 기준으로 작성, 만약 OrderLine, Orderer, ShippingInfo 등 다양한 객체를 포함한다면 구성요소 중에서 Order 루트 앤티티를 기준으로 리포지터리 인터페이스를 작성

jpa를 사용하면 장점

  • 메서드 실행이 끝나면 트랜잭션을 커밋하는데 jpa는 트랜잭션 범위에서 변경된 객체의 데이터를 db에 반영하기 위해 update 쿼리를 실행한다.
  • 아이디가 아닌 다른 조건으로 애그리거트를 조회하는 경우에는 findBy 뒤에 조건의 대상이 되는 프로퍼티 이름을 붙인다.
  • 이외 다른 조건으로 애그리거트를 조회할 때에는 jpa의 criteria 나 JPQL을 사용한다.
  • 또, 삭제할 기능을 구현하는 EntityManager의 remove() 메서드를 이용해 삭제기능을 구현할 수 있다.

매핑구현

  • 애그리거트 루트는 앤티티이므로 @Entity로 매핑 설정한다.
  • 한 테이블에 앤티티와 밸류 데이터가 같이 있으면 // 밸류는 @Embeddalbe로 매핑 설정 // 밸류 타입 프로퍼티는 @Embedded로 매핑 설정

기본 생성자

  • 앤티티와 밸류 생성자는 객체를 생성할 때 필요한 것을 전달받는다. 불변객체에서는 필요한 값을 모두 생성 시점에서 필요한 값을 모두 전달받으므로 값을 변경하지 않는다. (=set을 제공하지 않는다.)

  • JPA는 @Entity, @embeddable 클래스를 매핑하려면 기본 생성자를 제공해야 한다. JPA 프로바이더는 DB에서 데이터를 읽어와 매핑된 객체를 생성할 때 기본 생성자를 사용해서 객체를 생성한다.

Categories:

Updated: