본문 바로가기

JPA8

[JPA] 다양한 연관관계 매핑 ※ 인프런 강의 김영한님의 「자바 ORM 표준 JPA 프로그래밍」을 학습한 내용을 정리한 글입니다. 연관관계 매핑시 고려사항 3가지 다중성 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 사실 방향이라는 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A → B, B → A 처럼 참조가 2군데 객체 양방향 관계는 참조가 2군데 있음. 둘 중 테이블의 외래 키를 관리할 곳을 지정해야 함 연관관계의 주인 : 외래 키를 관리하는 참조 .. 2022. 11. 28.
[JPA] 연관관계 매핑 - 양방향 연관관계 ※ 인프런 강의 김영한님의 「자바 ORM 표준 JPA 프로그래밍」을 학습한 내용을 정리한 글입니다. 양방향 연관관계와 연관관계의 주인 이전 글에서 회원에서 팀을 조회할 수 있는 다대일 단방향 매핑을 정리하였습니다. 반대로 팀에서 회원에 접근하려면 어떻게 해야 할까요? 이번에는 양방향 연관관계 패밍을 통해 알아보도록 하겠습니다. ✅ 양방향 객체 연관관계에서 Team 객체에 List 형 members가 추가되었다! 회원과 팀은 다대일 관계, 반대로 팀에서 회원은 일대다 관계로 여러 데이터를 한꺼번에 연관관계를 맺으려면 List와 같은 컬렉션을 사용해야 함 ❗❓ 테이블 연관관계는 단방향 연관관계일 때와 똑같지 않은가?! 테이블 연관관계는 외래키 하나로 양방향으로 조회 가능 ( = DB 테이블은 JOIN으로 모.. 2022. 8. 8.
[JPA] 연관관계 매핑 - 단방향 연관관계 ※ 인프런 강의 김영한님의 「자바 ORM 표준 JPA 프로그래밍」을 학습한 내용을 정리한 글입니다. 객체와 테이블 연관관계의 차이를 이해 객체의 참조와 테이블의 외래 키를 매핑 방향(Direction) : 엔티티의 관계가 어느쪽을 참조하고 있는지 단방향 : 엔티티의 관계가 한 쪽만 참조하는 것 ex) 회원 → 팀, 팀 → 회원 양방향 : 엔티티의 관계가 양쪽 모두 참조하는 것 ex) 회원 ↔ 팀 다중성(Multiplicity) : 연관 관계가 있는 여러 개의 클래스가 있을 때 실제로 연관을 가지는 객체의 수 다대일(N:1) ex) 회원(N) : 팀(1) 일대다(1:N) ex) 팀(1) : 회원(N) 일대일(1:1) 다대다(N:N) 연관관계의 주인(Owner) : 객체가 양방향 연관관계일 때 테이블의 외래.. 2022. 8. 7.
[JPA] 엔티티 매핑 ※ 인프런 강의 김영한님의 「자바 ORM 표준 JPA 프로그래밍」을 학습한 내용을 정리한 글입니다. 1️⃣ 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 주의 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스 사용 X 저장할 필드에 final 사용 X 속성: name JPA에서 사용할 엔티티 이름을 지정한다. 기본값: 클래스 이름을 그대로 사용 같은 클래스 이름이 없으면 가급적 기본값을 사용하도록 한다. @Entity(name="Member") // 클래스명과 동일 public class Membe.. 2022. 7. 28.
[JPA] 준영속 상태 ※ 인프런 강의 김영한님의 「자바 ORM 표준 JPA 프로그래밍」을 학습한 내용을 정리한 글입니다. 영속에서 준영속으로 변할 수 있는 상태가 뭐가 있을까? 영속 상태 조회할 때 1차 캐시에서 데이터 찾을 수 있음. JPA가 관리하는 상태가 됨 준영속 상태 영속성 컨텍스트가 관리하는 영속 상태의 엔티티가 영속성 컨텍스트에서 분리(detached)된 것 준영속 상태의 엔티티는 영속성 컨텍스트가 제공하는 기능을 사용할 수 없다. 준영속상태로 만드는 방법 em.detach(entity) : 특정 엔티티만 준영속 상태로 전환한다. em.clear() : 영속성 컨텍스트를 완전히 초기화한다. em.close() : 영속성 컨텍스트를 종료한다. 엔티티를 준영속 상태로 전환 : detach() // 영속 Member .. 2022. 7. 18.
[JPA] 플러시(Flush) ※ 인프런 강의 김영한님의 「자바 ORM 표준 JPA 프로그래밍」을 학습한 내용을 정리한 글입니다. 플러시 (Flush) ❓ 영속성 컨텍스트의 변경 내용을 DB 에 반영하는 것을 말한다. Transaction commit 이 일어날 때 flush가 동작하는데, 이때 쓰기 지연 저장소에 쌓아 놨던 INSERT, UPDATE, DELETE SQL들이 DB에 날라간다. ❌ 영속성 컨텍스트를 비우는 것 아님 쉽게 얘기해서 영속성 컨텍스트의 변경 사항들과 DB의 상태를 맞추는 작업이다. 플러시는 영속성 컨텍스트의 변경 내용을 DB에 동기화한다. 플러시의 발생 변경 감지 (Dirty Checking) 수정된 Entity를 쓰기 지연 SQL 저장소에 등록 쓰기 지연 SQL 저장소의 Query를 DB에 전송한 (등록,.. 2022. 7. 18.