본문 바로가기

JPA22

JPA - 다양한 연관관계 매핑(2) : 일대다 [1 : N] 1. 일대다 단방향 public class Team{ @OneToMany // (mappedBy = "team") 가 빠짐 @JoinColumn(name = "TEAM_ID") //@JoinColumn이 추가됨 private List members = new ArrayList(); // 단순 조회가 아닌 변경이 가능해짐 } public class Member{ ... // 아무것도 해줄 필요 없음 } Member member = new Member("member1"); em.persister(member); Team team = new Team("teamA"); team.getMembers().add(member); // 이런 코드가 가능해진다. em.persist(team); TEAM과 MEMBER의 .. 2022. 4. 9.
JPA - 다양한 연관관계 매핑(1) : 다대일 [N : 1] feat. 연관관계 매핑시 고려사항 연관관계 매핑시 고려사항 3가지 1. 다중성 다대일 [N : 1] : @ManyToOne // 많이 사용 일대다 [1 : N] : @OneToMany // 가끔 사용 일대일 [1 : 1] : @OneToOne // 가끔 사용 다대다 [N : M] : @ManyToMany // 실무에서 사용 금지 JPA 어노테이션들은 거의 DB와 매핑하기 위해 존재한다. 따라서 다중성을 고려할때는 데이터베이스의 관점에서 다중성을 고려하면 된다. 2. 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인가능 사실 방향이라는 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 3. 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A.. 2022. 4. 9.
JPA - 연관관계 매핑 기초(3) : 양방향 연관관계와 연관관계의 주인 (2) 1. 양방향 연관관계와 연관관계의 주인 (2) - 주의점, 정리 양방향 매핑시 가장 많이 하는 실수 연관관계의 주인에 값을 입력하지 않는다. 양방향 매핑시 연관관계의 주인에 값을 입력해야 한다. 양쪽에 값을 설정하지 않고 주인에만 값을 설정할 경우 발생하는 문제 2가지 1. 값이 정상적으로 출력되지 않는다. 연관관계의 주인에만 값을 입력하고 ex) member.setTeam(team); 바로 Team.getMembers()하고 for문을 돌려 member 값을 출력해보면 값이 출력되지 않는다. 왜냐하면 Team의 객체는 현재 DB에 insert되지 않은 영속성 컨텍스트 1차 캐시저장소에만 저장되있는 순수한 객체 상태이기 때문이다. 물론em.flush(), em.clear()를 해준 상태로 team.get.. 2022. 4. 9.
JPA - 연관관계 매핑 기초(2) : 양방향 연관관계와 연관관계의 주인 (1) 양방향 연관관계와 연관관계의 주인 (1) - 기본 Member의 엔티티는 단방향과 동일 Team 엔티티는 컬렉션 추가 ※ mappedBy mappedBy는 반대편에 어느 컬럼과 매핑되었는가를 정의해주면 된다. mappedBy는 연관관계의 주인이 아니라는 뜻도 내포되어 있다. mappedBy는 읽기만 가능하다 (ReadOnly) 반대방향으로 객체 그래프 탐색 객체와 테이블이 관계를 맺는 차이 객체 연관관계 = 2개 • 회원 -> 팀 연관관계 1개(단방향) • 팀 -> 회원 연관관계 1개(단방향) 테이블 연관관계 = 1개 • 회원 팀의 연관관계 1개(양방향) 테이블에서는 FK 값 하나로 양방향 연관관계 가질 수 있다. (양쪽으로 JOIN가능) 객체의 양방향 관계 • 객체의 양방향 관계는 사실 양방향 관계가 .. 2022. 4. 9.
JPA - 연관관계 매핑 기초(1) : 연관관계가 필요한 이유, 단방향 연관관계 목표 1. 객체와 테이블 연관관계의 차이를 이해 2. 객체의 참조와 테이블의 외래 키를 매핑 (@JoinColumn) 3. 용어 이해 • 방향(Direction): 단방향, 양방향 • 다중성(Multiplicity): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) • 연관관계의 주인(Owner): 객체 양방향 연관관계는 관리 주인이 필요 연관관계가 필요한 이유 데이터베이스 테이블과 객체는 근본적으로 차이가 있다. 객체를 테이블에 맞추어 모델링 할 경우 (연관관계가 없는 객체) 객체의 참조 대신 외래키를 그대로 사용 외래 키 식별자를 직접 다룸 식별자로 다시 조회, 전혀 객체지향적인 방법이 아님 객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다. 테이블은.. 2022. 4. 9.