[JPA] 연관관계 매핑 양방향 + Junit 테스트

Walter Mitty·2023년 2월 15일
0

단방향

양방향

N:1

B 클래스가 C, R 클래스와 관계를 맺고있다.
누가 누구를 의존하는가 보면
B가 C를 의존하고, B가 R을 사용하고 있다.
C도 B를 의존하고싶다면, 양방향이라고 한다.

게시글을 쓴 고객을 확인할수도있고, 고객 입장에서 어떤 게시글을 썼는지 확인할 수 있다.

Id 두개 선언시 에러


  • 복합키 가능하도록 Serializable를 상속받는다.
    • 잘 만들어졌음!
      • Line 테이블에서 복합키로 잘 만들어져있음을 볼 수 있다.

Line하고 P하고 has-a 관계

입출고를 하려고할 때 주문 현황이 어떤지 알고싶을 수도 있좌놔
상품입장에서 주문이 얼마나 들어왔는쥐~

JUnit 테스트

Find 테스트



주문상세쪽은 리파지토리 따로 안만듦 - 주문 상세는 독립적인 아이가아니야!

  • 독립적인 자료가 아니라, 주문 기본과 같이 처리되어야할 자료이고 주문 기본없이는 상세혼자 독립적으로 있어도 안되고, 삭제가 되어도 안되기때문.
  • 주문 기본과 상세가 함께 insert되어야하고 복구되어도 함께 복구되어야 한다
    • LifeCycle이 함께 관리되어야한다.
      모든 엔티티별로 리포지토리를 모두 만들 필요가 없다. (대박이구만...)

  • OneToMany 시 lazy가 default 이기때문!
  • 영속성 전이
  • 같이 managed, detached, removed... persistence context에서 같이 관리되려면 cascade = CascadeType.ALL속성도 필요!


delete 테스트

  • 제약조건 관련 문제
  • 오잉 저는 delete 하려고했는데 왜 null값으로 update하려고 하나요?
    • pNo가 Id이므로 null이 들어갈 수 없음, 근데 null값을 넣으려고해서 문제
    • 자식자료가 있는 상태에서 부모를 삭제할 수 없다.
  • 두 클래스를 다시보자
    • P, Line 클래스는 양방향 has-a 관계이다.
      • 부모를 delete하려고했을 때 자식의 값을 null로 바꾸려고해서 에러가 나는것.
    • 양방향에서는, 부모쪽에 mappedBy = 자식쪽에 정의한 칼럼명를 명시해줘야한다.
      • p 객체에 pLines 객체가 묶여있다~ 함부로 삭제하면 안돼! 라는 뜻
  • 다시 delete 테스트
    • line 테이블(자식) 먼저 삭제되고
    • p 테이블(부모)도 잘 지워진다!

부모쪽 자료가 먼저 채워지고, 자식이 나중에 추가가되면서 자식쪽에서 부모를 FK로 참조를한다.


  • info와 has-a가 되어야 FK가 되는거니까 !
  • info의 입장에서 line의 정보가 필요할 때.

0개의 댓글