본문 바로가기

JPA16

[JPA] 다양한 연관관계 매핑 (4) - 다대다 (N:M) 연관관계 본 포스팅의 이미지 저작권은 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한) 강의에 있습니다. 다대다 (N:M) 관계형 데이터베이스는 정규화된 테이블 2개로 다대다(N:M) 관계를 표현할 수 없다. 연결 테이블을 추가해서 일대다, 다대일 관계로 풀어내야 한다. 객체는 컬렉션을 사용해서 객체 2개로 다대다 관계를 표현할 수 있다. @ManyToMany를 사용한다. @JoinTable로 연결 테이블을 지정할 수 있다. 다대다 매핑은 단방향, 양방향 모두 가능하다. 다대다 매핑 예시 @Entity public class Member { // id, name, team 속성 @ManyToMany @JoinTable(name = "MEMBER_PRODUCT") private List products = .. 2023. 8. 2.
[JPA] 다양한 연관관계 매핑 (3) - 일대일 (1:1) 연관관계 본 포스팅의 이미지 저작권은 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한) 강의에 있습니다. 일대일(1:1) 관계 일대일 관계는 그 반대도 일대일이다. 주 테이블이나 대상 테이블 중에 어느 곳에서든 외래키를 선택할 수 있다. 외래키에 데이트베이스 유니크(UNI) 제약조건이 추가되어야 한다. 일대일: 주 테이블에 외래키 단방향 멤버는 라커를 하나만 소유할 수 있고, 라커도 한 명의 멤버에게 소유될 수 있다. MEMBER 테이블에 LOCKER_ID로 외래키를 설정할 수 있고, 반대로 LOCKER 테이블에 MEMBER_ID로 외래키를 설정할 수 있다. 다대일(@ManyToOne) 단방향 매핑과 유사하다. 일대일: 주 테이블에 외래키 양방향 Locker 객체에 Member 객체 참조를 생성하면 된다... 2023. 7. 30.
[JPA] 다양한 연관관계 매핑 (2) - 일대다 (1:N) 연관관계 본 포스팅의 이미지 저작권은 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한) 강의에 있습니다. 일대다(1:N) 단방향 일(1)이 연관관계 주인이다. (1방향에서 외래키를 관리하겠다) 권장하지는 않는 스펙이다. 일(1)쪽에서 참조를 생성하여 외래키를 관리하는 연관관계 주인이 된다. DB는 객체와 상관없이 무조건 다(N)쪽에 외래키가 들어가야 한다. 따라서, Team의 List members값이 변경되었을 때, 다른 테이블의 외래키가 업데이트 되어야한다. @Entity public class Team { @Id @GeneratedValue @Column(name = "TEAM_ID") private Long id; private String name; @OneToMany @JoinColumn(nam.. 2023. 7. 28.
[JPA] 다양한 연관관계 매핑 (1) - 연관관계 매핑시 고려사항 및 다대일 (N:1) 연관관계 본 포스팅의 이미지 저작권은 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한) 강의에 있습니다. 연관관계 매핑시 고려사항 3가지 다중성 다대일(N:1) : @ManyToOne 일대다(1:N) : @OneToMany 일대일(1:1) : @OneToOne 다대다(N:M) : @ManyToMany 단방향인지 양방향인지 테이블 외래키 하나로 양쪽 조인 가능 사실 방향이라는 개념이 없다. 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조 가능하면 -> 단방향 양쪽이 서로 참조하면 -> 양방향 연관관계의 주인 테이블은 외래키 하나로 두 테이블의 연관관계를 맺는다. 객체 양방향 관계는 A->B, B->A 처럼 참조가 2군데이다. 객체 양방향 관계에서 테이블 외래키를 관리할 곳을 지정해야한다. 연관관계의.. 2023. 7. 27.
[JPA] 연관관계 매핑 기초 (3) - 양방향 연관관계와 연관관계의 주인 (2) 본 포스팅의 이미지 저작권은 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한) 강의에 있습니다. 양방향 매핑시 가장 많이 하는 실수 연관관계의 주인에 값을 입력하지 않음 잘못된 코드 // 회원 저장 Member member = new Member(); member.setName("member1"); em.persist(member); // 팀 저장 Team team = new Team(); team.setName("TeamA"); team.getMembers().add(member); em.persist(team); em.flush(); em.clear(); tx.commit(); 주인이 아닌 방향(Team의 List members)에만 연관관계(team.getMembers().add(memebe.. 2023. 7. 23.
[JPA] 연관관계 매핑 기초 (2) - 양방향 연관관계와 연관관계의 주인 (1) 본 포스팅의 이미지 저작권은 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한) 강의에 있습니다. 양방향 매핑 객체와 테이블이 양방향으로 연관관계가 이루어져 있다. 양방향의 연관관계를 맺으면 어느쪽에서든 참조할 수 있다. -> 양방향 연관관계를 맺기 위해서 객체간에는 변경이 있지만 테이블 연관관계는 단방향 연관관계와 차이가 없다. -> JOIN을 통해 양방향 연관관계를 얼마든지 표현 가능하다. (테이블 연관관계에서는 방향이라는 개념이 없다.) 객체에서 양방향 연관관계 맺기 @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") privat.. 2023. 7. 22.
728x90
반응형