본문 바로가기

JPA

(9)
#05 플러시 란? 플러시( flush() ) 란? 영속성 컨텍스트의 변경 내용을 SQL로 만들고 데이터베이스에 반영한다. 플러시 수행동작 영속성 컨텍스트에 있는 모든 엔티티를 스냅샷과 비교해서 수정된 엔티티를 찾는다. 변경이 확인된 엔티티는 수정 SQL을 만들고 쓰기지연 SQL저장소에 등록한다. 쓰기 지연 SQL 저장소의 쿼리를 DB에 전송한다. (C/R/U/D SQL 모두포함) 플러시 호출방법 3가지 em.flush() -> 직접호출 ( 테스트나 다른 프레임워크와 JPA를 함께 사용할 때를 제외하고 거의 사용안함 ) 트랜잭션 커밋 -> 자동호출 ( 커밋할 때 알아서 SQL문을 만들어서 보내야 되기 때문에 JPA는 자동으로 호출한다. ) JPQL 쿼리 실행 -> 자동호출 ( JPQL외에 영속성컨 텍스트에 기존에 반영되지 ..
#04 영속성 컨테스트의 특정 - 엔티티 등록 / 수정 / 삭제 Index 엔티티 등록 엔티티 수정 엔티티 삭제 엔티티 등록 EntityManager em = emf.createEntityManager(); //엔티티 매니저 생성 EntityTransaction transaction = em.getTransaction(); //트랜잭션 기능 획득 // 엔티티 매니저는 데이터 변경 시 트랜잭션을 시작해야 한다. transaction.begin(); // [트랜잭션] 시작 em.persist(memberA); em.persist(memberB); // 여기까지는 INSERT SQL을 데이터베이스에 보내지 않는다. // 커밋하는 순간 데이터베이스에 INSERT SQL을 보낸다. transaction.commit(); // [트랜잭션] 커밋 EntityManager는 트랜잭..
#03 영속성 컨텍스트의 특징 - 엔티티 조회 Index 영속성 컨텍스트(persistence context) 의 특징 엔티티 조회 영속성 컨텍스트(persistence context) 의 특징 영속성 컨텍스트와 식별자 값 - 영속성 컨텍스트는 엔티티를 구분하는데 @Id 어노테이션을 붙여놓은 식별자 값으로 구분한다. 따라서 영속 상태는 식별자 값이 반드시 있어야 하고 없으면 예외가 발생한다. 테이터베이스 저장 - JPA는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터베이스에 반영한다. 그리고 이부분을 flush 라고 한다. 영속성 컨텍스트의 장정 1차 캐시 동일성 보장 트랜잭션을 지원하는 쓰기 지연 변경 감지 지연 로딩 엔티티 조회 1차 캐시 영속성 컨텍스트(persistence context)는 내부에 캐시를 가지고 ..
#02 영속성 컨텍스트 / 엔티티의 생명주기 Index 영속성 컨텍스트란? 엔티티의 생명주기 영속성 컨텍스트란? 영속성 컨텍스트(Persistence context) 란 JPA를 이해하는데 가장 중요한 용어로서 이를 우리말로 해석하자면 '엔티티를 영구 저장하는 환경' 이라는 뜻으로 책에서는 이야기 한다. em.persist(member); ( 지난 포스팅을 보면 해당 코드를 알수 있다. 간다한게 em은 EntityManager 객체이다.) 우리는 회원Entity(member)를 저장 한다라고 생각할 수 있는데 정확하게는 엔티티 매니저를 사용해서 회원 엔티티를 영속성 컨텍스트에 저장한다. 영속성 컨텍스트는 논리적인 개념으로 엔티티 매니저를 생성할 때 하나 만들어진다. 그리고 EntityManager를 통해서 영속성 컨텍스트에 접근하고 관리할 수 있다..
#01 엔티티 매니저 팩토리와 엔티티 매니저 Index 사용방법과 주의사항 DB connection 획득 정리 JPA가 제공하는 기능은 크게 두가지가 있다. 1. 엔티티와 테이블을 매핑한다. 2. 설계 부분과 매핑한 엔티티를 실제 사용한다. EntityManager 는 Entity의 C/R/U/D 등 Entity와 관련된 모든일을 처리한다. 개발자 입장에서는 EntityManager를 가상의 데이터베이스 생각하면 된다. 그리고 책에 나오는 구현관련 예제는 Hiberante를 기준으로 이야기 해주고있다. 다른 JPA 구현체도 크게 다르지는 않다고하니까 크게 신경쓰지 않아도 될 것 같다. 사용방법과 주의사항 데이터 베이스를 하나면 사용하는 애플리케이션은 일반적으로 EntityManager Factory를 하나만 생성한다. 1. EntityManager..
#01 JPA를 이용한 첫번째 애플리케이션 해당 포스팅은 김영한님의 JPA프로그래밍을 읽으면서 공부한 내용을 정리하는 포스팅이다. Spring Boot를 사용한다면 Spring Data JPA 를 바로 사용해도 좋지만 기본 원리는 알고 있다면 이슈 대응이나 기술에 대한 이해도 측면에서 좋을 것 같아서 우선 책에 나온 예제를 토대로 사용 기술을 정리할 예정이다. (참고로 책에나온 설치과정이나 간단한 설정 부분은 다루지 않는다. 우리는 JPA가 무엇이고 어떻게 사용하며 어떤 클래스들이 있는지 익혀가는데 중점을 두고 포스팅 할 예정이다. ) Index 프로젝트 구조 엔티티 매니저 설정 트랜잭션 관리 비즈니스 로직 JPQL 정리 프로젝트 구조 JpaMain.java package jpabook.start; import javax.persistence.*..
#03 JPA란 무엇인가? Index JPA 소개 왜 JPA를 사용해야 하는가? 정리 JPA 소개 JPA는 자바 진영의 ORM 기술 표준이다. JPA는 아래 그림처럼 애플리케이션과 JDBC 사이에서 동작한다. JPA가 자바 진영의 ORM 표준 이라고 했는데 그럼 ORM은 무엇일까?? 잘 모른다면 지난번(서버스터디) 포스팅중에 정리 해놓은 글이 있으니 참고!! ORM이란? 바로가기 #02 ORM 이란? 내가 조금 오해했던 부분은 ORM관련 기술이 최근에 나온게 아니라는 사실이다. 또한 자바 에서만 사용하는 것도 아니고 C#, Ruby 등 다른 객체지향 언어 에서도 사용하고 있다. 이처럼 객체지향 언 debaeloper.tistory.com 나는 어떤 기술이 어떤 배경에서 나왔는지 역사? 를 알고 사용하면 조금더 이해하기 쉽다고 생각..
#02 패러다임의 불일치 Index 상속 연관관계 객체 그래프 탐색 비교 정리 객체와 관계형 데이터베이스는 지향하는 목적이 서로 다르므로 둘의 기능과 표현 방법도 다르다. 이것을 둘의 페러다임 불일치 문제라고 한다. 그러므로 객체를 테이블 구조에 저장하는 데는 한계가 있다.이 한계점을 개발자가 중간에서 해결해야한다. 문제는 이런 페러다임 불일치 문제를 해결하는데 너무나 많은 시간을 소비해야 되기 때문이다. 이러한 문제점에 대해서 JPA는 해결책을 제시한다. 상속 객체와 DB를 가장 비슷하게 설계할 수 있는 부분은 아래와 같다. 객체 : 상속 DB모델링 : 슈퍼타입 서브타입 관계 하지만 우리는 상속관계의 클래스마다 각각 Insert 문을 작성해야 되는 일을 지금도 하고있다. (나한테는 너무나 당연한 것 처럼...) 이렇게 객체 지..