다대다 실습 새로 생성 Product @Entity @NoArgsConstructor public class Product { @Id @GeneratedValue private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } Member 에다가 @ManyToMany @JoinTable(name = "MEMBER_PRODUCT")// 테이블명 적어줘야 private List product..
일대일 관계 일대일: 주 테이블에 외래 키 단방향 • 다대일(@ManyToOne) 단방향 매핑과 유사 일대일 : 주 태이블에 외래 키 양방향 일대일: 주 테이블에 외래 키 양방향 정리 실습 Locker @Entity @NoArgsConstructor public class Locker { @Id @GeneratedValue private Long id; private String name; } Member에 추가 @OneToOne @JoinColumn(name = "LOCKER_ID") private Locker locker; 실행하면 Hibernate: create table Locker ( id bigint not null, name varchar(255), primary key (id) ) Hibe..
여기서는 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 = ..