일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- db
- mysql
- OS
- spring
- java
- Data structure
- 프로그래머스
- 백준
- PYTHON
- HTML
- CSS
- Algorithm
- redis
- It
- javascript
- 트랜잭션
- 플로이드-워셜 알고리즘
- Docker
- 영속성 컨텍스트
- CS
- jpa
- nosql
- 자료구조
- BFS
- DFS
- 데이터베이스
- websocket
- 알고리즘
- 완전탐색
- 운영체제
- Today
- Total
목록영속성 컨텍스트 (3)
If at first you don't succeed, try again
* 개요JPA를 공부하다 보니, flush와 commit에 대한 개념이 너무 헷갈렸다.두 개의 작업은 데이터를 데이터베이스에 반영한다는 점에서는 비슷하지만 엄연히 다르다고 한다.이를 정리하기 위해 글을 쓰게 되었다. * flush()란?flush()는 영속성 컨텍스트의 변경사항을 즉시 데이터베이스에 반영(동기화)하는 역할을 한다.즉, 데이터베이스와 영속성 컨텍스트 사이의 스냅샷을 일치시키는 작업이다. - 스냅샷 : 엔티티를 영속성 컨텍스트에 보관할 때, 최초 상태를 복사해서 저장해두는 것 다만, 트랜잭션을 커밋하지는 않는다.이는 에러 발생 시, ROLLBACK이 가능한 단계까지만 반영하는 작업임을 알 수 있다.그리고 flush()가 호출되면 변경된 엔티티가 SQL로 변환되어 실행되지만, 트랜잭션이 끝난 ..
* 영속성 컨텍스트란?엔티티를 영구 저장하는 환경이라는 뜻이다. 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.em.persist(member);persist() 메서드는 엔티티 매니저를 사용해서 회원 엔티티를 영속성 컨텍스트에 저장한다. * 엔티티의 생명주기- 비영속(new / transient) : 영속성 컨텍스트와 전혀 관계가 없는 상태 - 영속(managed) : 영속성 컨텍스트에 저장된 상태- 준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태- 삭제(removed) : 삭제된 상태 * 비영속// 객체를 생성한 상태(비영속)Member member = new Member();member.setId("member1");..

* Entity Manager란?Entity Manager는 내부적으로 영속성 컨텍스트를 유지하며, 현재 관리 중인 엔티티 객체들을 캐싱하고 관리한다. * Entity Manager 생성 과정 1. 엔티티 매니저 팩토리 생성JPA를 시작하기 위해 persistence.xml의 설정 정보를 사용해서 엔티티 매니저 팩토리를 생성해야 한다.EntityManagerFactory emf = Persistence.createEntityManagerFactory("test");엔티티 매니저 팩토리를 생성할 때, JPA 구현체에 따라서 데이터베이스 커넥션 풀도 생성할 수 있으므로 비용이 크다. 따라서 엔티티 매니지 팩토리는 애플리케이션 전체에서 딱 한번만 생성하고 공유해서 사용해야 한다. 2. 엔티티 매니저 생성Ent..