단방향
양방향
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의 정보가 필요할 때.