
여기서는 1이 연관관계 주인 1 방향에서 연관관계를 관리하겠다. 영한쌤은 이 모델을 추천하지 않음. 이제는 팀을 기준으로 매핑을 처리하고 싶으 객체 연관관계에서는 Team을 기준으로 멤버를 알고 싶은데, 멤버를 기준으로는 별로 팀을 알고 싶지 않은 그런 상태 일대다 단방향 => 즉, Team에 있는 members를 바꾸면, MEMBER 테이블의 TEAM_ID도 변경이 되어야 한다. 코드로 살펴보면 Member @Entity @NoArgsConstructor public class Member { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERN..

다대일 단방향 MEMBER 입장에서 TEAM_ID는 이걸 통해 TEAM으로 찾아가기 위한 것이고, 같은 레벨로 (객체)Member에서 Team team 이라는 참조값도 동일한 의미. 다시 예시 앞에 했던 것들은 커밋 기록 남아있으니까 꽤 지우고 Member @Entity @NoArgsConstructor public class Member { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String username; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team te..

연관관계 매핑시 고려사항 3가지 다중성 단방향, 양방향 연관관계의 주인 다중성 다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany 단방향, 양방향 연관관계의 주인 • 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 • 객체 양방향 관계는 A->B, B->A 처럼 참조가 2군데 • 객체 양방향 관계는 참조가 2군데 있음. 둘중 테이블의 외래 키를 관리할 곳을 지정해야함 • 연관관계의 주인: 외래 키를 관리하는 참조 • 주인의 반대편: 외래 키에 영향을 주지 않음, 단순 조회만 가능

이전(예제 1)과 같은 테이블 구조 객체 구조 그러면 Order 테이블에서 MEMBER와 ORDER의 관계 // @Column(name = "MEMBER_ID") // private Long memberId; 이게 필요가 없어지고 @ManyToOne @JoinColumn(name = "MEMBER_ID") private Member member; // 이렇게 바꿔준다. 이렇게 바꿔준다. getter, setter도 변경해서 알맞게 public Member getMember() { return member; } public void setMember(Member member) { this.member = member; } OrderItem 클래스도 마찬가지 ORDERS와 ORDER_ITEM의 관계 // @..

객체와 테이블의 패러다임의 차이를 잘 이해해야 한다. 양방향 매핑 • 테이블은 단방향일 때와 동일하다(변화 x) 왜??? 테이블은 그냥 TEAM_ID(FK)로 join만 하면 됨 => 테이블의 연관관계는 FK 하나로 양방향이 다 있는 것. (FK만 집어넣으면 다 알 수가 있으므로, 더 정확하게 말하면 방향이랄 게 없다.) • 문제는 객체다. Member가 Team을 가졌으므로 member -> team은 가능했으나, team -> member는 방법이 없었다. 그래서 Team에다가 List : member를 넣어줘야 양쪽으로 이동이 가능하다. 즉, 객체는양쪽에 다 세팅이 필요했는데, 테이블은 외래키 하나만 넣어주면 양쪽 다 볼 수(이동) 있다는 차이가 있다. 양방향 매핑 (2) Member 엔티티는 단방..

연관관계 매핑 기초 - 객체가 지향하는 패러다임과 관계형 DB가 지향하는 패러다임이 서로 다르기 때문에 여기서 기인하는 어려움들이 있다. 학습목표 연관관계가 필요한 이유 ‘객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다.’ 예제 시나리오 • 회원과 팀이 있다. • 회원은 하나의 팀에만 소속될 수 있다. • 회원과 팀은 다대일 관계다. 객체를 테이블에 맞추어 모델링(연관관계가 없는 객체) Member @Entity @NoArgsConstructor public class Member { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "MEMBER_ID") private Long id; @Column(name = ..

이것 아마 인프런 예제와 동일하거나 최소한 비슷한 듯. 요구사항 분석 회원은 상품을 주문할 수 있다. 주문 시 여러 종류의 상품을 선택할 수 있다. 기능 목록 회원 기능 회원 등록 회원 조회 상품 기능 상품 등록 상품 조회 상품 수정 주문 기능 상품 주문 주문 내역 조회 주문 취소 완성된 페이지 모양 도메인 모델 분석 회원과 주문의 관계 회원은 여러 번 주문할 수 있다.(일대다) 주문과 상품의 관계 주문할 때 여러 상품을 선택할 수 있다. 같은 상품도 여러 번 주문될 수 있다. '주문상품'이라는 모델을 만들어서 다대다 관계를 일대다, 다대일 관계로 풀어낸다. 테이블 설계 엔티티 설계와 매핑 이제, 기초 코드 Item @Entity public class Item { @Id @GeneratedValue @..

보충 이 IDENTITY 전략은 Id를 내가 직접 넣으면 안 된다. Id가 NULL로 날아오면 그 때 DB에서 Id 값을 직접 세팅해준다. 뭐가 문제냐,id 값을 알 수 있는 시점이 DB에 값이 들어가봐야 안다는 것.그런데 영속성 컨텍스트에서 관리가 되려면 무조건 PK 값이 있어야 했다. 그래서 어떤 제약이 생기느냐...JPA는 PK를 모르니 값을 넣을 수 있는 방법이 없다는 것. 울며 겨자먹기로, IDENTITY 전략에서만 em.persist() 호출하자마자 그 시점에 Hibernate: /* insert inflearn.exjpa.Member */ insert into Member (id, name) values (null, ?) 이렇게 INSERT 쿼리를 날려버린다. (보통 커밋시점에 INSERT ..