이 글은 김영한의 [실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발] 수강하며 정리한 글입니다.

 

 

🟦 기본 환경: IDE: IntelliJ, Language: Java

 

 

Cascade: 영속성 전이

: 상위 Entity 영속화 → 하위 Entity 영속화, 상위 Entity 삭제 → 하위 Entity 등 특정 Entity를 영속 상태로 만들 경우, 연관 Entity도 함께 영속상태로 전이되는 것

 

 

Cascade 종류

1. Cascade.ALL

: 상위 Entity에서 일어나는 모든 Cascade에 대하여 하위 Entity로 전이

 

2. Cascade.PERSIST

: 상위 Entity 저장 시, 하위 Entity 저장

 

3. Cascade.MERGE

: 상위 Entity 상태 병합 시, 하위 Entity 상태 병합

 

4. Cascade.REMOVE

: 상위 Entity 삭제 시, 하위 Entity 삭제

 

5. Cascade.REFRESH

: 상위 Entity 인스턴스 값을 다시 읽어올 경우(= 새로고침 할 경우), 하위 Entity까지 새로고침

 

6. Cascade.DETACH

: 상위 Entity를 영속성 컨텍스트에서 제거(detach*)할 경우, 하위 Entity까지 제거

 * detach, 준영속 상태: 영속 상태의 entity가 영속성 컨텍스트에서 분리된 것

 + Persistance Context: Entity를 영구 저장하는 환경으로, 어플리케이션과 DB 사이에서 객체를 보관하는 가상의 저장소같은 역할

 

 

 

참고 자료

 

JPA 연관관계 영속성 전이(CASCADE) - CascadeType

📎 JPA 영속성 전이(CASCADE) 안녕하세요! 이번에 정리할 내용은 JPA에서 영속성 전이(CASCADE)와 관련된 내용입니다. 최근 개발을 진행하며 두 연관된 엔티티에서 save()를 하는 과정에서 오류가 발생

zzang9ha.tistory.com

 

[JPA] Spring JPA CascadeType 종류

JPA Cascade Types Spring JPA CascadeType 종류 javax.persistence.CascadeType JPA Cascade Type ALL PERSIST MERGE REMOVE REFRESH DETACH CascadeType.ALL 상위 엔터티에서 하위 엔터티로 모든 작업을 전파 @Entity public class Person { @Id @Gen

data-make.tistory.com

 

[Spring JPA] 영속성 컨텍스트(Persistence Context)

영속성 컨텍스트란? 엔티티를 영구 저장하는 환경이라는 뜻으로 어플리케이션과 DB사이에서 객체를 보관하는 가상의 DB같은 역할을 한다.

velog.io

 

[Spring] JPA - 영속성 컨텍스트(Persistence Context) 정리

이전 글에서 JPA에 대한 기본 정리를 진행해보았습니다. 이번 글에서는 JPA 에서 가장 중요할 수 있는 영속성 컨텍스트(Persistence Context)에 대해서 정리해보고자 합니다. 1. 영속성 컨텍스트란? - 엔

dev-jwblog.tistory.com

 

'Java > JPA' 카테고리의 다른 글

[SpringBoot_JPA_1] create Private Method  (0) 2023.05.27
[SpringBoot_JPA_1] Injection  (0) 2023.05.25
[SpringBoot_JPA_1] FetchType.LAZY, EAGER  (0) 2023.05.25
[SpringBoot_JPA_1] JPA Entity Default Constructor  (1) 2023.05.23
[SpringBoot_JPA_1] @JoinTable  (0) 2023.05.23

이 글은 김영한의 [실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발] 수강하며 정리한 글입니다.

 

 

🟦 기본 환경: IDE: IntelliJ, Language: Java

 

 

FetchType.EAGER(즉시 로딩): 데이터 조회 시 연관 데이터까지 한 번에 조회

: @OneToMnay default

: @ManyToMnay default

@OneToOne FetchType을 선언하지 않을 경우, Default값인 EAGER로 선언되어 Delivery table 조회 시 연관관계에 있는 Order table까지 함께 조회

 

 

FetchType.LAZY(지연 로딩): 필요한 데이터만 선별적으로 조회

: @ManyToOne default

: @OneToOne default

@OneToOne FetchType을 LAZY로 선언할 경우, Delivery table을 조회할 때 Order table까지 조회되지 않음

 

 

⭐ EAGER를 사용할 경우, 의도치 않은 쿼리문 생성으로 인해 성능이 저하될 수 있으므로 지연로딩(LAZY)을 사용하는 것이 좋음

 

 

 

참고 자료

 

JPA 지연로딩을 사용해야하는 이유, 지연로딩(Lazy)과 즉시로딩(Eager)

공부하는 과정에서 작성한 글입니다. 잘못되거나 보충할 내용이 있다면 언제든지 알려주세요:) JPA에서는 데이터를 조회할 때 즉시 로딩(EAGER)과 지연 로딩(LAZY) 두 가지 방식이 있다. 이 두 가지

developer-hm.tistory.com

 

'Java > JPA' 카테고리의 다른 글

[SpringBoot_JPA_1] Injection  (0) 2023.05.25
[SpringBoot_JPA_1] Cascade Type  (0) 2023.05.25
[SpringBoot_JPA_1] JPA Entity Default Constructor  (1) 2023.05.23
[SpringBoot_JPA_1] @JoinTable  (0) 2023.05.23
[SpringBoot_JPA_1] @Enumerated  (0) 2023.05.23

이 글은 김영한의 [실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발] 수강하며 정리한 글입니다.

 

 

🟦 기본 환경: IDE: IntelliJ, Language: Java

 

 

매개변수가 있는 생성자를 사용할 경우, 기본 생성자가 자동으로 만들어지지 않음

 

🚨 JPA에서 Entity 생성 시, 매개변수가 있는 생성자를 만들 경우, 기본 생성자를 필수적으로 기재해야함

→ JPA는 DB 값을 객체 필드에 주입할 경우, "기본 생성자"로 객체를 생성한 이후 "Reflection API"를 사용하여 값을 매핑

Reflection API는 생성자의 인자정보는 갖고 올 수 없으므로 매개변수가 있는 생성자 작성 시, 기본 생성자를 작성하여 객체를 생성할 수 있는 환경을 제공해야 함

 

 

⭐ Reflection API: 클래스 타입을 알지 못하더라도 해당 클래스의 메소드, 변수들에 접근할 수 있도록 해주는 API

 

Example class의 Type을 단순히 Object로 선언할 경우, getter 함수를 사용할 수 없으나, Reflection API 사용 시 가능

1. Class cls = Example.class;: Example 클래스의 Class 객체 생성

2. Method getExample = cls.getMethod("getExample");: cls 객체에서 "getExample"이라는 이름을 가진 메서드 호출

3. String title = (String) getExample.invoke(example, null);

  3.1. getExample 메서드를 호출
  3.2. invoke 메서드를 사용하여 메서드를 실행하고 결과를 반환
    - example: Example 클래스의 인스턴스
    - null: 메서드에 전달할 인자 없음
  3.3. 반환된 결과를 String으로 캐스팅하여 result 변수에 할당

 

 

 

+📚 추가로 공부해볼 것: 기본 생성자 선언 시, protected, public만 가능한 이유

 

참고 자료

 

JPA Entity 생성자에 관하여

JPA 에서 기본 생성자가 필요한 이유와 private 으로 선언하면 안되는 이유에 관하여

velog.io

 

Spring, JPA에 기본 생성자가 필요한 이유

인프런에서 김영한님의 강의를 들으면서 “JPA의 Entity객체에는 기본 생성자가 있어야 한다” 라는 말을 들은적이 있다.왜 그런 걸까? 알아보도록 하자.위의 이유를 알기 위해서는 먼저 java Reflect

velog.io

 

'Java > JPA' 카테고리의 다른 글

[SpringBoot_JPA_1] Cascade Type  (0) 2023.05.25
[SpringBoot_JPA_1] FetchType.LAZY, EAGER  (0) 2023.05.25
[SpringBoot_JPA_1] @JoinTable  (0) 2023.05.23
[SpringBoot_JPA_1] @Enumerated  (0) 2023.05.23
[SpringBoot_JPA_1] @Inheritance @DiscriminatorColumn  (0) 2023.05.22

이 글은 김영한의 [실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발] 수강하며 정리한 글입니다.

 

 

🟦 기본 환경: IDE: IntelliJ, Language: Java

 

 

@JoinTable

: 외래키를 사용하는 연관 관계와는 달리 조인테이블을 별도의 테이블로 만들어 각 테이블의 각 테이블의 외래키를 가지고 연관관계를 관리

name: 조인 테이블 이름

joinColumns: 현재 entity에서 join에 참여할 column(FK, 현재 entity의 PK)

inverseJoinColumns: join되어질 entity에서 join에 참여할 column(FK, join entity의 PK)

 

@JoinTable 방식 예시

 

 

 

참고 자료

 

JPA 연관관계 매핑 - 조인 테이블(@JoinTable)

데이터베이스 테이블의 연관관계를 설계 하는 방법은 크게 두가지 입니다. 첫 번째는 앞서 복합키 매핑에서 살펴 보았듯이 외래키를 가지고 연관관계를 설계 하는 조인 컬럼 방법과 테이블과

parkhyeokjin.github.io

 

이 글은 김영한의 [실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발] 수강하며 정리한 글입니다.

 

 

🟦 기본 환경: IDE: IntelliJ, Language: Java

 

 

@Enumerated

자바 Enum type

1. ORIGINAL: enum 순서값(1, 2, ...)을 DB에 저장

2. STRING: enum 이름을 DB에 저장

 

🚨 EnumType.ORIGINAL 사용 시, 다음과 같은 상황에서 문제가 발생할 수 있으므로 주의 필요

 

기존

변경

 

기존에는 COMP가 2였으나, 변경된 이후에는 ING가 2가 되어 2값이 COMP와 ING가 혼재되는 문제가 발생

 

 

 

 

9. [JPA] @Enumerated

자바 enum 타입을 엔티티 클래스의 속성으로 사용할 수 있다.@Enumerated 애노테이션에는 두 가지 EnumType이 존재한다.EnumType.ORDINAL : enum 순서 값을 DB에 저장EnumType.STRING : enum 이름을 DB에 저장cs 예를

lng1982.tistory.com

 

 

[JPA] @Enumerated란 무엇이며 어떻게 사용할까? 🤔

오늘은 @Enumerated란 무엇이며 언제 어떻게 사용해야하는지 알아보자. 엔티티 매핑에서 Enum 타입을 사용할 때 @Enumerated 어노테이션을 사용하는데 우선 @Enumerated 어노테이션의 종류는 두 가지이다.

dandev.tistory.com