자바 ORM 표준 JPA 프로그래밍 5장 정리

wannabeking·2022년 8월 27일
0

JPA

목록 보기
2/7

연관관계

  • 방향 : 당방향, 양방향 존재
  • 연관관계의 주인 : 양방향 연관관계에는 연관관계의 주인이 필요
  • 다중성 : 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M)
  • 테이블에서는 한쪽 테이블에 FK가 존재하면 어느 방향으로든 조인 가능하지만 객체에서는 서로를 필드로 가져야 양방향 가능, 한쪽만 존재하면 단방향만 가능
  • 객체 단방향
    • 객체 A에서는 객체 B 필드를 통해 B를 가져올 수 있지만 객체 B에서는 객체 A 필드가 존재하지 않음, 한쪽에서만 참조
  • 객체 양방향
    • 객체 A, B 모두에서 서로를 가져올 수 있음, 결국 연관관계를 하나 더 만들어야함, 양쪽에서 서로 참조
  • @ManyToOne : 다대일 관계로 매핑, fetch는 패치 전략 설정 속성이고 @ManyToOne은 FetchType.EAGER, @OneToMany는 FetchType.LAZY가 default, cascade는 영속성 전이 기능 속성
  • @JoinColumn(name = "외래키이름") : 외래키 매핑에 사용, referencedColumnName은 외래 키가 참조하는 대상 테이블의 컬럼명 속성
  • 엔터티 저장할 때 연관된 모든 엔터티는 영속 상태여야 함
  • 연관된 엔터티를 삭제하기 전에 기존에 존재하는 연관관계를 먼저 제거해야함, 제거하지 않으면 외래키 제약조건으로 DB 오류 발생
  • @OneToMany(mappedBy = "반대쪽매핑필드명")
  • 연관관계의 두 객체 중 하나의 테이블에서 외래 키를 관리해야 함, 연관관계의 주인만 데이터베이스 연관관계와 매핑되고 외래 키를 관리할 수 있음, 주인이 아닌 쪽은 읽기만 가능, mappedBy 속성 사용하지 않는 쪽이 주인임
  • 다시 말해서 연관관계의 주인은 외래 키가 있는 곳, 일대다 관계에서는 항상 다 쪽이 외래 키 가짐
  • 연관관계 주인쪽에서 연관관계 편의 메소드로 양쪽 모두 관계를 설정하는 메소드 작성 가능, 이때 새로운 객체로 관계를 수정하면 기존의 관계를 제거해야함
  • 연관관계의 주인은 외래 키의 위치와 관련해서 정해야함, 비즈니스 중요도로 접근하면 안됨


profile
내일은 개발왕 😎

0개의 댓글