본문 바로가기

Framework and Tool/JPA56

JPA - 영속성 관리 - 준영속과 병합 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 준영속 여태까지는 영속상태를 중심으로 알아보았다. 이번에는 영속 -> 준영속 상태를 알아보도록 하자. 영속성관리 초반에 보았던 생명주기 그래프의 내용을 떠올려보자. 영속 상태의 엔티티를 준영속 상태로 만드는 방법은 3 가지가 있다. em.detach(entity): 특정 엔티티를 준영속 상태로 전환 em.clear(): 영속성 컨텍스트 초기화 em.close(): 영속성 컨텍스트 종료 준영속 상태는 거의 비영속과 같다고 할 수 있다. 영속성 컨텍스트가 제공하는 1차 캐시, 쓰기 지연, 변경 감지, 지연 로딩의 기능이 동작하지 않는다. 비영속은 식별자 값이 없지만 준영속 상태는 이미 한번 영속 상태였으므로 식별자값을 갖고 있다. 준영속 상태에서 지연 로딩시.. 2021. 6. 24.
JPA - 영속성 관리 - 플러시(flush) - 참조: 자바 ORM 표준 JPA 프로그래밍 - 플러시 플러시(flush())는 영속성 컨텍스트의 변경 내용을 DB에 반영하는 연산이다. 플러시를 수행하면 변경 감지 -> 영속성 컨텍스트의 엔티티와 스냅샷 비교 -> 수정된 엔티티 수정 쿼리 생성 -> 쓰기 지연 SQL 저장소 등록 쓰기 지연 SQL 저장소 -> DB 로 쿼리 전송 영속성 컨텍스트의 플러시는 3 가지 방법으로 수행할 수 있다. em.flush()로 직접 호출 트랜잭션 커밋시 자동 호출 JPQL 쿼리 실행 시 자동 호출 em.flush() 를 직접 호출하면 영속성 컨텍스트를 강제로 플러시한다. 하지만 이는 거의 사용하지 않는 기능이다. 트랜잭션 커밋시 자동 호출되어야 하는 이유는 flush() 와 COMMIT 이 다르기 때문이다. flus.. 2021. 6. 24.
JPA - 영속성 관리 - 영속성 컨텍스트 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 영속성 컨텍스트 영속성 컨텍스트는 엔티티를 식별자 값(@Id - 기본 키) 으로 구분하므로 영속 상태는 식별자 값이 반드시 있어야 한다. 영속성 컨텍스트의 엔티티는 커밋하는 순간 DB에 반영하는데 이를 플러시(flush) 라고 한다. 영속성 컨텍스트는 아래 기능을 제공한다. 1차 캐시 동일성 보장 트랜잭션을 지원하는 쓰기 지연 변경 감지 지연 로딩 - 엔티티 조회 영속성 컨텍스트는 내부에 캐시를 갖고 있는데 이를 1차 캐시라고 한다. 영속 상태의 엔티티는 모두 이곳에 저장되며, @Id 로 맵핑한 식별값을 이용하여 구분한다. String id = "ID#1"; Member member = new Member(); member.setId(id); member.. 2021. 6. 24.
JPA - 영속성 관리 - 엔티티의 생명주기 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 엔티티 매니저 팩토리와 엔티티 매니저 엔티티 매니저는 말 그대로 엔티티를 관리하는 관리자다. 엔티티를 저장, 수정, 삭제, 조회하며 개발자가 엔티티를 저장하는 가상의 데이터베이스라고 할 수 있다. 엔티티 매니저 팩토리는 용어에서도 알 수 있듯이, 엔티티 매니저를 생산하는 공장이다. 엔티티 매니저 팩토리를 생성하는 비용은 크지만 팩토리에서 엔티티 매니저를 생성할때에는 비용이 거의 들지 않는다. 엔티티 매니저 팩토리는 스레드-세이프 설계가 되어있어 어플리케이션에서 1개를 생성하여 공유해도 되지만, 엔티티 매니저는 스레드간 공유를 하면 안된다. 엔티티 매니저 팩토리는 생성시에 커넥션 풀을 만들며, 엔티티 매니저는 DB 커넥션을 사용하는데 DB 연결이 필요한 시.. 2021. 6. 23.
JPA - 엔티티 매니저, 트랜잭션, JPQL - 참조: 자바 ORM 표준 JPA 프로그래밍 - 이 글에 나오는 코드는 https://ocwokocw.tistory.com/118 글을 먼저 읽었다는 점을 전제로 작성한다. - Java example 엔티티 매니저를 살펴보기 전에 우리가 DB를 다룰 때 일반적으로 사용하는 등록, 수정, 삭제, 조회 연산 예제 코드를 살펴보자. 아래 코드는 엔티티 매니저 설정, 트랜잭션 관리, 비즈니스 로직 3 부분으로 구성 되어있다. @SpringBootApplication public class JpaApplication { public static void main(String[] args) { SpringApplication.run(JpaApplication.class, args); EntityManagerFac.. 2021. 6. 23.
JPA - 환경구축 및 객체맵핑, persistence.xml - 참조: 자바 ORM 표준 JPA 프로그래밍 - 참조: http://www.h2database.com/html/tutorial.html#creating_new_databases - 환경 구축 JPA Project를 시작하기 위해 환경을 구축해보자. 환경설정은 STS(Spring Tool Suit) 의 Spring Starter Project 를 이용한다. 아래 그림을 참조하여 Maven과 Java 8 version 을 선택한다. 그 다음 화면에서 Dependency 를 고를 수 있다. Spring Web 과 Template 엔진으로 Thymeleaf 를 기본으로 선택해준다. H2 DB와 Spring Data JPA 를 선택한다. 설치를 끝냈으면 h2 를 다운받아야 한다. H2는 In-memory 형으로.. 2021. 6. 23.