[Spring Boot] 스프링부트 (IntelliJ)/JPA 6

[JPA] CascadeType 영속성 전이

위 사진처럼 엔티티를 설계할 때 사용 - CascadeType.ALL : 모든 Cascade를 적용 - CascadeType.PERSIST : 엔티티를 영속화할 때, 연관된 엔티티도 모두 적용 - CascadeType.REMOVE : 엔티티를 제거할 때, 연관된 엔티티도 모두 제거 - CascadeType.MERGE : 엔티티 상태를 병합할 때, 연관된 엔티티도 모두 병합 - CascadeType.DETACH : 부모 엔티티를 detach() 수행하면, 연관 엔티티도 detach()상태가 되어 변경 사항 반영 X - CascadeType.REFRESH : 상위 엔티티를 새로고침할 때, 연관된 엔티티도 모두 새로고침

[JPA] 엔티티 설계시 주의점

1. 엔티티에는 가급적 Setter를 사용하지 말자 - Setter가 모두 열려있다면, 변경 포인트가 너무 많아서 유지보수가 어렵다. - Setter말고 같은 기능을 하는 메서드를 만들어서 사용한다. 2. 모든 연관관계는 지연로딩으로 설정한다. - 즉시로딩(EAGER)과 지연로딩(LAZY)이 있는데 - 즉시로딩은 하나의 엔티티를 로딩할 때 연관 된 데이터를 모두 불러오는 것 - 지연로딩은 필요한 시점에 연관된 엔티티의 데이터만 불러옴 - 연관된 엔티티를 함께 DB에서 조회해야 하면, fetxh join 또는 엔티티 그래프 기능을 사용한다. - @OneToOne, @ManyToOne관계는 기본이 즉시로딩이므로 직접 지연로딩으로 설정해야 한다. 3. 컬렉션은 필드에서 초기화 한다. - null 문제에서 안전..

[JPA] Mysql JPA 테이블 추가하기

전에 했던 내용을 복습하기 위해 Member 테이블을 하나 더 생성했다 persistence.xml 파일에 jpabasic.reserve.domain.Member 를 추가했다. jpabasic.reserve.domain.User jpabasic.reserve.domain.Member true 테이블과 일치하게 VO도 추가하여 작성했다 package jpabasic.reserve.domain; import jakarta.persistence.*; import java.time.LocalDateTime; @Entity @Table(name = "member") public class Member { @Id private String email; private String name; @Column(name =..

[JPA] ORM

ORM (Object Relational Mapping) 자바와 DB의 데이터 타입이 다름 자바는 보통 vo에 데이터에 있는 데이터를 자바에 '모델링' 한다고 함 어플리케이션과 데이터베이스 연결 시 SQL 언어가 아닌 어플리케이션 개발 언어로 데이터베이스를 접근할 수 있게 해주는 툴 데이터 전송 및 받는 과정 자바에서 데이터 베이스에 연결 요청을 해서 승인을 받으면 세션을 열어줌 자바는 커넥터로 쿼리 전송 쿼리를 돌린 데이터 베이스는 데이터 타입을 자바로 보내줌 자바가 알아볼 수 있는 데이터 타입으로 바꿔주는 것 까지의 모든 과정을 JPA를 사용하면 단순한 함수로 처리해줌

JPA란?

- Java Persistence API - 자바 진영의 ORM 기술 표준 - JPA는 기존에 우리가 직접 썼던 JDBC API를 날렸던걸 대신 사용하여 데이터를 주고받는다. API - Application Programming interface 정해진 인터페이스로 프로그래밍하여 프로그램을 만들 수 있는 도구 ORM이란? - Object-relational mapping (객체 관계 매핑) - 객체는 객체대로 설계 - 관계형 데이터베이스는 관계형 데이터베이스대로 설계 - ORM 프레임워크가 중간에서 매핑 - 대중적인 언어에는 대부분 ORM 기술이 존재 JPA를 사용하는 이유 1. 생산성이 좋아진다. - 저장 : jpa.persist(member) - 조회 : Member member = jpa.find(..