[JPA] 연관관계 매핑 (연관관계 편의 메서드)
들어가며
이전 시간에는 연관관계 매핑의 기초 다대일 매핑하는 방법과 연관관계 주인에 대해서 알아보았다. 이번에는 양방향 매핑을 할때, 객체 관점에서 어떻게 처리할지?를 고민해보자.
이전 시간에는 연관관계 매핑의 기초 다대일 매핑하는 방법과 연관관계 주인에 대해서 알아보았다. 이번에는 양방향 매핑을 할때, 객체 관점에서 어떻게 처리할지?를 고민해보자.
엔티티 설계시 주의사항? 고려사항들을 알아본다. 관련내용은 김영한님의 인프런 강좌내용을 발췌했습니다!
오늘은 Spring Data JPA가 제공하는 Audit 기능을 알아보자. Audit은 주로 DB값이 변경했을 때 누가 값을 변경했고, 언제 변경했는지 Audit(감사)하는 용도로 사용한다. Spring Data JPA는 @CreatedDate
, @LastModifiedDate
, @CreatedBy
, @LastModifiedBy
와 같은 어노테이션을 제공한다.
@EnableJpaAuditing
어노테이션을 RootClass의 최 상단에 추가한다.
1 |
|
AuditingEntityListener
를 등록해당 엔티티에 클래스 레벨에 @EntityListeners
를 선언하고,AuditingEntityListner
를 등록한다.
1 |
|
해당 엔티티에 Audit을 할 필드를 정의한다. (생성일,수정일 )
1 | // Audit 날짜 field를 정의한다. |
1 | // Audit 작성자 field를 정의한다. |
DB의 변경사항을 일으키는 Author를 Account클래스의 객체와 매핑했다.
Account 클래스는 다음과 같다.
1 |
|
@CreatedBy
와 @LastModifiedBy
는 Spring Security의 ContextHolder안에 들어있는 Principal(신원정보)의 name값으로 매핑을 해준다.
만약에 Custom하게 구현할려면 아래와 같이 AuditorAware 인터페이스를 구현해야 한다.
Spring Security의 ContextHolder에 존재하는 Authentication 정보를 통해서 매핑한다.
1 |
|
이렇게 만든 빈(AccountAwareAudit)을 참조할 수 있도록 @EnableJpaAuditing의 auditorAwareRef 속성값으로 등록 해준다.
1 |
|
Spring Data Jpa가 제공하는 엔티티의 변화를 추적하는 Audit 기능에 대해서 알아보았다.
날짜 Audit은 제공해준 어노테이션 기반으로 구현할 부분이 없었지만, 작성자에 관한 부분은 대부분 Spring Security를 사용하기 때문에 ContextHolder를 통해서 신원정보를 가져와서 매핑해 주었다.
Spring Data Jpa에서 제공하는 JpaRepository
의 구현체인 SimpleJpaReposity
의 @Transactional
을 어떻게 사용하는지 살펴보고, 실제 우리 서비스에서 어떻게 적용하면 좋을지에 대해서 생각해보자.
JPA를 사용해서 엔티티의 일부 데이터만 가져오는 Projection에 대해서 알아보자.
JpaRepository의 구현체 SimpleJpaRepository에서 save()메서드가 내부적으로 어떻게 동작하는지 알아보자.
JPA에서 쿼리 메서드를 정의하는 방법에 대해서 알아보자.
JPA에서 QueryDsl를 사용하는 방법에 대해서 알아보자. QueryDSL은 쿼리 domain specific language로 도메인에 맞게 쿼리를 프로그링 할 수 있다는 것이다.
JPA에서 null처리 하는 방법에 대해서 알아 보자.
JPA 연관관계 매핑중, 실무에서 가장 많이 쓰이는 1:N (일대다) 매핑에 대해서 알아보자.
일대다 매핑을 하기 위해서 하나의 팀에 여러명의 멤버가 속해있는, 1:N 관계를 생각해보자.
관계 매핑에는 방향성
과 외래키의 주인
두 가지 상황이 발생 한다.(객체와 테이블간의 패러다임 불일치 때문에)
일반적으로 객체에서는 참조를 통해서 방향성을 갖는다.