Java Persistence API자바 진영의 ORM 기술 표준Object-relational mapping(객체 관계 매핑)객체는 객체대로 설계 RDB 는 RDB 대로 설계하고 ORM 프레임워크가 중간에서 매핑한다.어플리케이션은 하나의 엔티티 매니저 팩토리를 전체에
JPA의 가장 핵심적인 내용 중 한가지는 바로 엔티티를 영구 저장하는 환경인 영속성 컨텍스트 이다.물리적인 개념이 아닌 논리적인 개념이다. JPA를 사용하면 엔티티 매니저를 통해 영속성 컨텍스트에 접근하게 된다.비영속 (new/transient) : 영속성 컨텍스트
APP 실행 시 DDL 이 자동 생성된다.hibernate.hbm2ddl.auto 를 이용해 속성을 설정할 수 있다create : 기존 테이블 삭제 후 생성create-drop: create 와 같으나 종료 시점시 table dropupdate: 변경분만 반영 (운영D
객체지향 설계의 목표는 객체들간의 협력 공동체를 만드는 것이다.FK 로 연관된 테이블의 PK 를 참조시킨다.FK 에 @JoinColumn(name = "...") 로 설정할 수 있다.테이블 관점에서의 양방향 연관관계하나의 외래 키로 두 테이블의 연관관계를 관리하는 것사
설계를 하다보면 상속관계가 필요한 경우가 생긴다. 상위 클래스 '책' 과 '만화책', '소설책' 같은 상속관계는 RDB로 어떻게 표현해야 할까?RDB 에는 상속관계가 존재하지 않는다. 대신, 슈퍼타입과 서브타입 관계라는 모델링 기법이 객체의 상속과 유사하기 떄문에 이를
A 테이블에 수백개의 테이블이 연관되어 있다고 가정해보자. 만약 A 테이블을 조회한다면 A 와 연관된 테이블들을 모두 가져올 것이고, A 와 연관된 테이블들과 연관된 테이블들도 가져오려고 할 것이다.우리는 우리에게 필요한 A 만 찝어서 가져오는 로직이 필요하다!JPA
int, Integer, String 처럼 단순히 값으로 사용한느 자바 기본 타입이나 객체식별자가 없고 변경시 추적이 불가능함@Entity 로 정의하는 객체데이터가 변해도 식별자로 추적 가능복합 값 타입JPA 는 Embedded Type 이라고 함주로 기본 값 타입을
@Transactional에는 Spring AOP의 Proxy방식이 사용된다. 그렇기 때문에 우선 Proxy에 대해서 알아보자.Spring에는 크게 두 가지 프록시 구현체를 사용한다. JDK PROXY(=Dynamic PROXY) 와 CGLib이다. Spring AOP
성능 향상을 위해서 Batch Insert를 도입했다. 그 과정을 정리하기 위해서 작성한다.Batch Insert는 여러 개의 Insert를 묶어서 하나의 트랜잭션으로 묶는 것을 말한다.JPA 에서는 내부적으로 쓰기 지연 SQL 저장소를 이용한다. 커밋을 하기 전까지
부끄럽지만 JPA를 사용하면서도 어노테이션을 통해 잠금이 가능하다는걸 알지 못했다. 그래서 이것들을 정리해보고자 한다.현실적으로 데이터 갱신 시 경합이 발생하지 않을 것이라고 보고 잠금을 거는 기법이다. 예를 들어서 회원 정보 수정과 같은 경우는 회원 본인에 의해서 수
들어가며 DB를 설계하다 보면 엔티티와 라이프 사이클을 함께 하지만 식별자를 가지지 않고 오직 값만 가지고 있는 Value Type(값 타입) 을 종종 사용하게 된다. 본 포스트는 Entity와 Value Type을 매핑하는 다양한 방법에 대해서 공부하기 위해 작성했
JPA는 다양한 방법으로 동시성 처리를 지원한다. Lock을 걸수도 있고, Transaction의 격리 수준을 조절할 수도 있다. 프로젝트를 진행하며 동시성을 고려해본 경험이 없기 때문에 동시성 처리를 위한 공부를 하며 새롭게 알게 된 내용들을 정리하고자 하기 위해 작
Hibernate는 1차 캐시를 제공한다. 1차 캐시는 영속성 컨텍스트에 존재하고 따라서 영속성 컨텍스트와 생명주기가 동일하다. 즉, 트랜잭션이 종료되면 1차 캐시도 종료된다. 서로 다른 isolation에서의 concurrent를 보장하고자 하는 요구가 생긴다면 2차
JPA 락킹 포스트 에서 JPA 가 DB 에 락을 거는 방법에 대해서 학습을 했었다. 해당 포스트는 JPA 락킹 포스트 에서 공부했었던 내용과 거기에 추가적인 내용을 더해 예제를 만들어보며 락킹을 공부했던 내용을 기록하고자 작성하게 됐다.이전 포스트 작성한 바와 같이