| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
- datastructure
- 윤성우의 열혈 자료구조
- Graph
- 윤성우 열혈자료구조
- Serialization
- C 언어 코딩 도장
- 이스케이프 문자
- C programming
- JSON
- 알기쉬운 알고리즘
- insertion sort
- s
- 이것이 자바다
- Selection Sorting
- Stack
- coding test
- R
- stream
- Algorithm
- 혼자 공부하는 C언어
- list 컬렉션
- 메모리구조
- buffer
- Today
- Total
목록Server/JPA ORM (14)
Engineering Note
연관관계 주인JPA에서 양방향 관계로 Entity가 있을 때 외래키를 관리해줄 주인을 정해주어야 한다. JPA는 연관관계의 주인이 어떤 Entity라고 지정하지 않고 연관관계 주인이 아니라는 의미로 'mapped by' 옵션으로 외래키를 관리 하지 않는다고 지정한다.Book과 BookStore 엔티티를 예시로 생각해볼 수 있다. Book과 BookStores는 다대일 관계고, 양방향으로 세팅을 해주었다. Book Entity@Entity@Getter @Setterpublic class Book { @Id @GeneratedValue private Long id; private String isbn; private String title; @ManyToOne priva..
직접 할당: @ID 만 사용 자동 생성(@GeneratedValue) strategy(GenerationType = ) IDENTITY: 데이터베이스에 위임, MySQL(Auto Increment) SEQUENCE: 데이터베이스 시퀀스 오브젝트 사용, ORACLE AUTO: 방언에 따라 자동 지정, 기본값 TABLE:키 생성용 테이블 사용, 모든 DB에서 사용. => 거의 사용 X 참고 자료 : 인프런 JPA 기본편(김영한)
EntityManagerFactory는 애플리케이션 마다 하나가 존재하고, EntityManagerFactory가 EntityManager를 생성한다. 그리고 EntityManager는 영속성 컨텍스트를 관리하는데, 요청 트랜잭션 마다 영속성컨텍스트를 생성하고 소멸시킨다. 영속성 컨텍스트만 자세히 살펴보면 아래와 같다.영속성 컨텍스트는 JPA에서 가장 중요한 개념으로 Entity를 관리하는 공간이고 트랜잭션과 생명주기를 함께한다. 메모리에 존재하면서 DB 테이블의 캐시 역할을 하는데, 실행부터 테이블이 캐시화돼서 존재하는 건 아니고 트랜잭션 내에서 한 번이라도 조회되거나 persist된 엔티티가 key:value 형태로 저장된다. key는 PK, value는 **엔티티 객체(DB 테이블의 row를 표현하..
1. 영속성 컨텍스트 생명주기JPA를 사용하는 환경(주로 Spring Boot의 Service Layer)에서 @Transactional 어노테이션이 붙은 메서드가 호출될 때 영속성 컨텍스트는 다음과 같은 생명주기를 가집니다. 1-1. 트랜잭션 시작 (생성)@Transactional 메서드가 호출되면 데이터베이스 트랜잭션이 시작됩니다.이와 동시에 JPA의 영속성 컨텍스트가 생성되어 현재 실행 중인 쓰레드의 트랜잭션에 바인딩됩니다.이 영속성 컨텍스트가 1차 캐시 역할을 하며, 트랜잭션 내에서 조회되거나 저장된 모든 엔티티 객체들을 관리합니다. 1-2. 비즈니스 로직 실행 (유지)메서드 내에서 JPA 관련 작업(조회, 저장, 수정 등)이 실행되는 동안 영속성 컨텍스트는 유지됩니다.엔티티를 수정하더라도, 이 ..
영속성 전이, cascade- 엔티티의 상태를 변경할 때 해당 엔티티와 연관된 엔티티의 상태 변화를 전파시키는 옵션 CASCADE 종류 설명PERSIST부모 엔티티가 영속화될 때 자식 엔티티도 영속화MERGE부모 엔티티가 병할될 때 자식 엔티티도 병합REMOVE부모 엔티티가 삭제될 때 연관된 자식 엔티티도 삭제REFRESH부모 엔티티가 refresh되면 연관된 자식 엔티티도 refreshDETACH부모 엔티티가 detach되면 연관된 자식 엔티티도 detach 상태로 변경ALL부모 엔티티의 영속성 상태 변화를 자식 엔티티에 모두 전이 Order Entity가 있고, OrderItem Entity가 있을 때 Order Entity가 OrderItem Entity를 참조하고 있을 때 Order Entity..
내부 동작 흐름 정리 상황 설명 Order 엔티티가 있고, Order와 일대다 관계를 맺는 orderItem 엔티티를 cascde.all로 설정 해두었다. 이 상태에서 orderRepository.save(order)메서드를 정리하려고 한다.package com.shop.entity;import com.shop.contant.OrderStatus;import jakarta.persistence.*;import lombok.Getter;import lombok.Setter;import java.time.LocalDateTime;import java.util.ArrayList;import java.util.List;@Entity@Table(name = "orders")@Getter@Setterpublic ..
@Enumerated - JPA에서 Enum 타입을 DB에 어떤 방식으로 저장할 지 결정하는 어노테이션이다. 기본값@Enumerated(EnumType.ORDINAL) - Enum의 순서 0, 1, 2 로 DB에 저장 예시public enum OrderStatus { ORDER, CANCEL} 주문 상태를 나타내는 상수 Enum이 있다고 했을 때DB 저장시 ORDER = 0, CANCEL = 1로 DB에 저장된다.나중에 Enum에 새로운 값이 추가되면 DB의 값이 꼬이는 문제가 발생한다. public enum OrderStatus { ORDER, SHIPPED, CANCEL} DB에서 CANCEL이 1로 저장된 값이 있지만, SHIPPED가 추가된 이후에는 SHIPPED가 1이 되어 버린다. ..
Entity- 데이터 베이스 테이블에 대응하는 클래스- @Entity 어노테이션이 붙은 클래스는 JPA에서 관리하는 엔티티가 된다. Entity Manager Factory- Entity Manager instence를 관리하는 주체- 애플리케이션 실행 시 한 개만 만들어지며 사용자로부터 요청이 오면 Entity Manager Factory로 부터 Entity 매니저를 생성한다. Entity Manager- Persistence Context(영속성 컨텍스트)에 접근하여 Entity에 대한 데이터베이스 작업을 제공- 내부적으로 데이터베이스 커넥셔능ㄹ 사용해서 데이터베이스에 접근 Entity Manger의 메서드1. find() : Persistence Context에서 Entity를 검색하고, ..
