⚡ 생각대로 살지 않으면 사는대로 생각한다.
⚡ 나는 어차피 잘 될 놈이다. 이미 잘 되고 있고, 계속해서 잘 되고 있다.
✅참고로 영한좌는 이 모델을 권장하지 않음.
객체 설계
에서 Team은 Member를 참조해야 하지만, Member는 Team을 몰라도됨.DB 설게
에서는 무조건 다(N)쪽에 외래 키가 들어가야 한다.Team : Member는 1:N 관계로, Team을 통해서 MEMBER 테이블의 외래키인 TEAM_ID를 매핑한다.
퍼~렇게 드래그 쳐진 곳은 그렇다고 치는데,
슬래시로 도배된 라인 중간의
team.getMembers().add(member);
이 코드가 조금 낯설다..
Team쪽을 건드렸으니 TEAM 테이블에 쿼리가 나가야하는데, TEAM이 아니라 MEMBER 테이블에 외래키
로 TEAM이 있기때문에, MEMBER 테이블에 쿼리를 날려준다.
값은 정상적으로 들어왔다. 하지만 쿼리가 좀 많이 나갔다.
왜 update
쿼리가 나가야하는가..??
이 코드에서
Team team = new Team();
team.setName("teamA");
여기는 그냥 TEAM 테이블에 넣으면 되는데 문제는 아래 코드다..
team.getMembers.add(member);
사진과 같은 설계에서 Team Entity를 저장하는데, MEMBER를 update 칠 수 밖에 없다. 그래서 어쩔 수 없이 쿼리가 나갈 수 밖에 없다.
테이블이 수십개가 되는 실무상황에서는 이렇게 엮이게 되면, 운영이 힘들어진다.
영한좌는 다대일 단방향 관계 / 필요하면 양방향 추가하는 전략으로 간다.토비님, 영호님(객체지향의 사실과 오해, 오브젝트 저자)도 비슷한 생각을 하심...ㄷㄷ;;
@JoinColumn(name = "TEAM_ID")
를 주석처리하고, 실행하면, 못 보던 테이블을 CREATE한다.
※ 약간 억지..;;
Team도, Member도 연관관계 주인처럼 만들어주고, Member는 읽기 전용 매핑만 되도록 함.
코드는 아래와 같이 해주면 됨..
insertable, updatable을 붙이지 않으면, 둘다 연관관계 주인이 된다..
※ 한 번씩 있긴있다..
-끝-