JPA 5

JPA | @Transactional 과 변경감지

DB 테이블에 저장되어 있는 데이터의 정보를 수정하기 위해 update 하는 로직을 개발하고자 한다면 다음과 같은 논리적 절차를 거치게 될 것이다. 트랜잭션 시작 변경하고자 하는 데이터의 id를 통한 조회 조회한 데이터에 수정할 내용들로 교체 update 처리 트랜잭션 커밋 JPA에서는 위의 데이터 변경 로직을 어떻게 처리해주는지 확인해보자 트랜잭션의 시작 영속성 Entity 조회 - 없으면 DB 조회 후 영속화 조회한 영속성 Entity의 데이터 수정 트랜잭션 커밋 위의 과정에서 볼 수 있듯이 JPA에서는 따로 update 쿼리를 요청하는 부분이 없습니다. 여기서 JPA의 장점 중 하나가 나오는데 바로 변경감지(Dirty Checking) 입니다. ✅ 변경감지 변경감지는 트랜잭션 커밋 시, 영속화된 E..

JPA | QueryDsl 집계함수[SUM, COUNT ..] 사용 시, Dto로 반환

✅ 고민되었던 부분 querydsl 에서 집계함수를 사용하게 되면 반환값이 Tuple 형식으로 반환되게 된다. Tuple 형식을 사용해보려고 했지만 반환되는 값에서 필드 하나하나를 가져와 다시 dto에 맵핑해야 하는 상황이 발생되었고, Tuple 자체가 querydsl 객체이기 때문에 Repository 계층이 아닌, Service 계층까지 가져오는 것을 막고 싶었다. 위의 방법을 찾아보다가 집계함수 사용 시, groupby와 projection을 사용하여 dto로 받아올 수 있다는 사실을 알게 되었고, projection에 대하여 공부해보고, 사용 방법에 대해서도 적어보려고 한다! ✅ Projection 연산자란 ..? 한 Relation의 Attribute들의 부분 집합을 구성하는 연산자이다. 결과로..

GeneratedType - 기본키 저장 전략 4가지

🏷 IDENTITY 전략 mysql에서 사용 기본키 생성을 데이터베이스에 위임한다. em.persist() 로 객체를 영속화 하는 시점에 insert query 가 db에 전송되고 여기서 반환되는 식별자 값을 가지고 1차 캐시에 저장한다. ❓em.persist() 에 대해서 좀 더 알아보자 보통 객체 생성 후, em.persist(Person) 을 사용하게 되면, 영속 상태 즉, 1차 캐시에 저장되게 된다. 이후, commit() 을 하기 전까지는, 쓰기 지연 sql 저장소에 보관되어 있다가, commit() 이 되면, 엔티티 매니저는 영속성 컨텍스트를 flush() 하게 된다. ✔️ 영속성 컨텍스트의 flush() 영속성 컨텍스트의 변경 내용을 데이터베이스에 동기화 하는 작업으로, 이때 등록, 수정, ..

JPA 연관관계 총 정리

🏷 JPA에서 가장 중요한 것 JPA에서 가장 중요한 것을 뽑자면 객체와 관계형 데이터베이스 테이블을 어떻게 매핑되는지 이해하는 것이다. 왜냐하면 JPA의 목적인 "객체 지향 프로그래밍과 데이터베이스 사이의 패러다임 불일치를 해결" 이라는 것과 가장 직접적으로 연관되어 있기 때문이다. 객체와 테이블 매핑에 대한 내용을 조금 더 구체적으로 나누면 컬럼, 타입, 테이블, ... 등에 대한 1차적인 매핑과 테이블 간의 연관 관계 매핑으로 나눌 수 있다. 1차적인 매핑 @Entity, @Column, @Id, @GeneratedValue, @Enumerated .. 등의 말 그대로 객체와 데이터 베이스 사이의 1:1로 대응되는 것으로써, 기본적인 annotation을 숙지하고 필요한 경우에 찾아보는게 효율적이다..

Spring Boot에서 H2 데이터베이스 연결

JPA에 대해 좀 더 깊이 있는 공부를 하고 싶어서 JPA를 활용한 프로젝트를 시작해보기로 결정했다. spring web project를 만들고 JPA 라이브러리, Lombok 라이브러리 등 프로젝트에 필요한 기본적인 라이브러리 의존성을 추가해줬다. 다음은 db 연결!! 1️⃣ dependency 추가 본인 프로젝트는 gradle 의존성 추가 Implementation 'com.h2database:h2' 2️⃣ application properties 추가 스프링 부트에서 DB 연결을 할 때는 application properties에 설정을 한다. H2 DB 또한 다른 DB들과 마찬가지로 application properties에 H2 DB의 설정 정보를 입력해야 JPA나 Mybatis에서 사용할 수 ..