| p_table
- SELECT FROM P JOIN line WHERE p_no = ?
- 비식별자이자 일대다니까 상품정보는 있으나 상품에 따른 주문 정보가 없을수도 있음
- 상품 입장에서 어떤 주문에서 이 상품이 쓰였는지 볼 수 있다.
- line 테이블에 자료가 없어도 보여야 하니까 p에 line이 LEFT OUTER JOIN 되어야 한다.
- findBy로 SELECT시 LEFT OUTER JOIN이 기본이다.
- INNER JOIN시 주문된 상품만 보인다.
- SELECT 구문을 만들 땐
pr.findById(상품번호);
- DELETE p WHERE p_no = ?
| info_table
- SELECT FROM JOIN 시 LEFT OUTER JOIN이 필요없다!
or.findById(주문번호);
- findBy시 LEFT OUTER JOIN이 기본으로 되는데 어떡하지?
- nullable = false 필요!
- INNER JOIN이 된다.
- DELETE
DELETE시,
어쨌거나 저쨌거나 line_tbl을 먼저 삭제해야 info, p 삭제가 가능하다.
그러나, 하나를 지우면 다른 연관된 테이블 정보를 다 삭제가 가능하게 하면 안되기 때문에 속성으로 제어를 해줘야한다.
- 만약 cascade = CascadeType.ALL라면, p 지우면 line 지우고, line쪽에서는 연결되어있는 info도 지우려고한다.
- 또한 상품 추가할 때 line도 추가하려고함.
- 영속성 때문에 그런데, 영속성 전이를 끊어주자.
- 상품 추가하면서 line 같이 추가? 아니지.
- 참고로 select는 상품에 주문정보가 딸려와야해서 EAGER
따라서, 양방향 cascade = CascadeType.ALL은 좋지않아~
mappedBy로 같이 삭제하고 그럴거 아니니까 @JoinColumn으로 FK 설정
테이블 다 드랍 후, 테스트 돌리기
1. 상품 save
2. 주문 save
- info 입장에서 line 셀렉트 되는지 확인
- p입장에서 line 셀렉트 되는지 확인
- info 삭제시 line도 삭제
- p 삭제시 line
mappedBy = 해주면 다 같이 지워주지만 캐스캐이드를 안쓸거기때문에 조인컬럼으로 해놔서 주문이있을 땐 상품 삭제가 안된다.
만약 다 삭제해주고 싶으면 mappedBy 살리고 캐스케이드 추가해주면됨