[JPA] 즉시 로딩과 지연 로딩
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 즉시 로딩과 지연 로딩기능을 구현할 때 DB에서 가져오고 싶은 정보의 범위가 비즈니스 로직에 따라 다르다. 예를 들어, Member와 Team이라는 두 개의 entity가 연관 관계에 있을 때, 구현 목적에 따라 두 개의 데이터가 한 번에 조회되는 것이 좋을 수도 있고, 그렇지 않을 수도 있다. 이러한 상황을 JPA가 프록시와 지연 로딩을 통해 해결한다. 이전 글에서 프록시에 대해 알아보았고, 이 글에서는 지연 로딩에 대해 알아보겠다.JPA는 개발자가 연관된 Entity의 조회 시점을 선택할 수 있도록 다음 두 가지 방법을 제공한다.즉시 로딩지연 로딩  ✅ 즉시 로딩 (EAGER LOADING)Entity를 조회할..
[JPA] 프록시
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 프록시기능을 구현할 때 DB에서 가져오고 싶은 정보의 범위가 비즈니스 로직에 따라 다르다. 예를 들어, Member와 Team이라는 두 개의 entity가 연관관계상에 있을 때, 구현 목적에 따라 두 개의 데이터가 한 번에 조회되는 것이 좋을 수도 있고, 그렇지 않을 수도 있다. 이러한 상황을 JPA가 프록시와 지연로딩을 통해 해결한다. 이 글에서는 우선 프록시에 대해 알아보겠다. ▶ 프록시 기초1️⃣ em.find()DB를 통해 실제 Entity 객체를 조회하는 메서드member라는 객체를 사용하지 않고 find()만 해도 SELECT 쿼리를 실행한다.2️⃣ em.getReference()DB 조회를 미루는 가짜..
[JPA] 고급 매핑(상속관계 매핑) - 엔티티(Entity) 매핑 (7)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 상속 관계 매핑관계형 데이터베이스에는 객체지향 언어에서 다루는 상속이라는 개념이 없다.대신 관계형 데이터베이스에는 슈퍼타입 서브타입 관계라는 모델링 기법이 상속과 유사하다.ORM에서 이야기하는 상속 관계 매핑은 객체의 상속 구조와 데이터베이스의 슈퍼타입 서브타입 관계를 매핑하는 것이다.슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현하는 3가지 방법조인 전략: 각각을 모두 테이블로 만들고 조회할 때 조인을 사용한다.단일 테이블 전략: 테이블을 하나만 사용해서 통합한다.구현 클래스마다 테이블 전략: 서브 타입마다 하나의 테이블을 만든다.  ✅ 조인 전략엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부..
[JPA] 다양한 연관관계 매핑 - 엔티티(Entity) 매핑 (6)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 다대일(@ManyToOne)다대일 관계의 반대 방향은 항상 일대다 관계이고, 일대다 관계의 반대 방향은 항상 다대일 관계이다. 데이터베이스 테이블의 일(1), 다(N) 관계에서 외래 키는 항상 다 쪽에 있다. 따라서 객체 양방향 관계에서 연관관계 주인은 항상 다 쪽이다. ▶ 다대일 단방향 [N:1]단방향은 한쪽만 참조가 가능하다.회원은 Member.team으로 팀 엔티티를 참조할 수 있지만 반대로 팀에는 회원을 조회하는 필드가 없다.🔽 다대일(@ManyToOne) 단방향 코드@Entitypublic class Member { @Id @GeneratedValue @Column(name = "MEMBER_..
[JPA] 단방향 연관관계와 양방향 연관관계 - 엔티티(Entity) 매핑 (5)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 단방향 연관관계▶ 객체 연관관계 VS 테이블 연관관계객체 연관관계회원 객체(Member)는 Member.team 필드(멤버 변수)로 팀 객체와 연관관계를 맺는다.회원 객체와 팀 객체는 단방향 관계이다. 회원은 Member.team 필드를 통해서 팀을 알 수 있지만 반대로 팀은 회원을 알 수 없다.테이블 연관관계회원 테이블은 TEAM_ID 외래 키로 팀 테이블과 연관관계를 맺는다.회원 테이블과 팀 테이블은 양방향 관계이다. 회원 테이블의 TEAM_ID 외래 키를 통해서 회원과 팀을 조인할 수 있고, 반대로 팀과 회원도 조인할 수 있다.객체 연관관계와 테이블 연관관계의 가장 큰 차이참조를 통한 연관관계는 항상 단방향이..
[JPA] 연관관계 매핑 - 엔티티(Entity) 매핑 (4)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 연관관계란?연관관계란 두 도메인(객체, 테이블)이 서로 논리적인 의미를 갖고 양쪽을 참조하는 관계를 뜻한다.JPA에서의 연관관계는 데이터베이스의 테이블 간 관계를 객체지향 프로그래밍의 클래스 간 관계로 매핑하는 것을 의미한다.객체지향 프로그램에서 객체들이 연관관계를 맺는 방법과 데이터베이스에서 테이블들이 연관관계를 맺는 방법이 다른데, 이 간극을 채워주기 위한 기술이 JPA이다.  ✅ 연관관계가 필요한 이유위와 같은 구조에서 연관관계가 없다면 찾고자 하는 회원의 팀을 찾는 코드는 다음과 같다.Member findMember = em.find(Member.class, member.getId()); //찾고자 하는 m..
[JPA] 데이터베이스 스키마 자동 생성
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 데이터베이스 스키마 자동 생성옵션설명create기존 테이블 삭제 후 다시 생성 (DROP + CREATE)create-dropcreate와 같으나 종료 시점에 테이블 DROPupdate변경 사항만 반영validate엔티티와 테이블이 정상 매핑되었는지만 확인none사용하지 않음⚠️ 운영 장비에는 절대 create, create-drop, update를 사용하면 안 된다.개발 초기 단계: create, update테스트 서버: update, validate스테이징, 운영 서버: validate, none  📍 참고JPA 기본편 정리
[JPA] 필드와 컬럼 매핑 - 엔티티(Entity) 매핑 (3)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 필드와 컬럼 매핑▶ @Column객체 필드를 테이블 컬럼에 매핑한다.속성기능기본값name필드와 매핑할 테이블의 컬럼 이름객체의 필드 이름nullable(DDL)null 값의 허용 여부를 설정한다.trueunique(DDL)한 컬럼에 간단히 유니크 제약조건을 걸 때 사용한다. columnDefinition(DDL)데이터베이스 컬럼 정보를 직접 줄 수 있다. length(DDL)문자 길이 제약 조건, String 타입에만 사용한다.255precision / scale(DDL)BigDecimal 타입에서 사용한다. 아주 큰 숫자나 정밀한 소수를 다루어야 할 때만 사용한다.precision=19 / scale=2inser..
soeun2537
Hello, 소은!