TIL : 230105

JINSEON YE·2023년 1월 5일

TIL

목록 보기
49/88

<배운 것>

외래 키

  • 관계형 데이터베이스에서 외래 키는 한 테이블의 필드 중 다른 테이블의 행을 식별할 수 있는 키를 말한다.

매핑 테이블

  • 매핑 테이블은 각 테이블의 PK를 외래 키로 참조하는 테이블로 값 집합을 저장할 때 주로 사용된다.

테이블 연관 관계

  • 관계란, 일반테이블과 매핑테이블이 어떤 형태로 연결되었는지 뜻하는 것이다.
    1:1, 1:N, N:1

연관관계 어노테이션

@OneToOne : 일대일 매핑
@OneToMany : 일대다 매핑 (사용자, 1) : (주문 목록, N)
@ManyToOne : 다대일 매핑 (주문 목록, N) : (사용자, 1)

@ManyToOne, 다대일 매핑

OrderItem 입장에서는 하나의 아이템은 한 명의 User 에게 매핑되어야 하고
그럼 (OrderItem) 다 : 일 (User) 의 관계가 성립한다.

보통 참조 하는 엔티티 에서 사용을 하는데, 외래 키를 가지고 있는 엔티티라고 생각하면 편하다.

FetchType

  • 즉시 로딩 (FecthType.EAGER)
    엔티티를 조회할 때, 연관된 엔티티를 즉시 한 번에 조회한다.
    즉, 실제 객체가 사용되지 않더라도 조회를 해온다.

  • 지연 로딩 (FetchType.LAZY)
    엔티티를 조회할 때, 연관된 엔티티는 실제 사용 시점에 조회한다.
    즉, 실제 객체가 사용되는 시점까지 조회를 미룬다.

@OneToMany, 일대다 매핑

User 입장에서 하나의 사용자는 여러 주문 아이템을 가질 수 있다.
그럼 (User) 일 : 다 (OrderItem) 의 관계가 성립한다.

보통 참조 당하는 엔티티 에서 사용하는데, List 컬렉션을 참조변수로 한다.

mappedBy

  • mappedBy는 양방향 매핑에서 사용되는 개념이다.
    양방향으로 참조될 때 참조 당하는 엔티티에서 사용한다.
  • 형식은 @OneToMany(mappedBy = "참조하는 엔티티에 있는 변수 이름") 으로 작성할 수 있다.
  • mappedBy를 사용하는 이유는, 현재 자신의 참조가 해당 엔티티에 어떤 변수로 지정되었는지 JPA 에게 알려주기 위함 쯤이라고 생각하자.

단방향

@ManyToOne 만 존재한다면, 즉 OrderItem 클래스만 User의 정보를 갖고 있다면, 이는 단방향 연관관계라고 한다.

양방향

  • 양방향 연관관계가 될 때 외래 키를 관리하고 있을 주체를 확실히 할 것
    - 외래 키를 갖는 주체는 DB 테이블에 외래 키가 있는 쪽으로 한다.
    - 외래 키를 갖는 쪽에서만 UPDATE와 INSERT 를 수행하고, 없는 쪽은 SELECT 만 수행할 것

  • 양방향 연관관계에서 상호 참조를 주의할 것
    Lombok 의 @ToString
    @ToString(exclude = "") 를 이용하여 해결

  • MVC 에서 JSON Converting 될 때
    엔티티를 통신에서 그대로 사용하지 말고 DTO 객체를 만들어서 사용할 것

@Trasacntional

  • JPA의 모든 작업은 하나의 트랜잭션 내에서 일어나게 된다.
    해당 클래스의 트랜잭션 바운더리를 걸어주는 것이다.

@Rollback

  • 작업 중 문제가 발생했을 때, 트랜젝션의 처리 과정에서 발생한 변경 사항을 취소하고, 트랜젝션 과정을 종료시킨다.
    false 로 설정한다면 실행 시에 DB에 저장한다. : rollback 을 수행하지 않는다.
    true 로 설정한다면 실행 시에 DB에 저장되지 않는다. : rollback을 수행한다.

참고

profile
백엔드 개발자

0개의 댓글