본문 바로가기

Framework and Tool108

JPA - 엔티티 맵핑 - 기본 키 맵핑 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 기본 키 맵핑 지금 예제까지는 기본 키 필드에 @Id 어노테이션을 붙이고, 키 값은 어플리케이션에서 직접 할당하였다. MySQL 이나 오라클같은 DB 에서는 기본키를 시퀀스나 AUTO_INCREMENT 기능을 이용하기도 하는데, 하이버네이트도 여러 가지 기본 키 생성전략을 지원한다. 직접 할당: 여태까지 예제에서 썼던 방법으로 직접 할당하는 방법이 있다. 자동 생성 - IDENTITY: 기본 키 생성을 DB 에 위임한다. 자동 생성 - SEQUENCE: DB 의 시퀀스를 이용하여 키를 할당한다. 자동 생성 - 테이블: 키 생성 테이블을 사용한다. 직접 할당하는 경우 @Id 어노테이션만 붙이면 되고, 자동 생성 전략을 사용할 경우 @GeneratedValu.. 2021. 6. 27.
JPA - 엔티티 맵핑 - 기본 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 참조: https://docs.jboss.org/hibernate/orm/5.1/userguide/html_single/chapters/domain/naming.html - 엔티티 맵핑 JPA 를 사용하는데 있어서 가장 중요한일은 테이블과 엔티티를 정확히 맵핑하는것이다. JPA 의 맵핑 어노테이션은 아래와 같다. 객체 - 테이블 맵핑: @Entity, @Table 기본 키 맵핑: @Id 필드와 컬럼 맵핑: @Column 연관관계 맵핑: @ManyToOne, @JoinColumn - @Entity JPA 를 사용해서 맵핑한 클래스는 @Entity 어노테이션을 반드시 붙여야 한다. 그래야 JPA 가 관리해야 하는 클래스라고 인식할 수 있다. @Entity 적.. 2021. 6. 27.
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.