Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- mysql
- Kotlin
- CI
- ECS
- CodePipeline
- Spring JPA
- spring kafka
- JPA
- API
- git
- bean
- Streams
- offsetdatetime
- spring
- QueryDSL
- kafka
- mirror maker2
- Entity
- transactionaleventlistener
- centos7
- PAGING
- consumer
- entity graph
- AWS
- K8s
- cd
- producer
- Spring Data JPA
- Kubernetes
- topic생성
Archives
- Today
- Total
Yebali
Spring JPA 준영속 엔티티 수정하기 본문
준영속 엔티티란?
영속성 컨텍스트가 더는 관리하지 않는 엔티티를 말합니다.
해당 엔티티는 영속성 컨텍스트가 제공하는 기능을 사용하지 못한다.
임의로 만들어낸 엔티티도 기존 식별자(id)를 가지고 있는 경우에 준영속성 엔티티로 볼 수 있다.
준영속 엔티티 수정하는 방법
- 변경 감지 기능 사용
- 병합(merge) 사용
변경감지 기능
@Transactional
void update(Item itemParam) {
//itemParam: 파리미터로 넘어온 준영속 상태의 엔티티
Item findItem = em.find(Item.class, itemParam.getId()); //같은 엔티티를 조회.
findItem.setPrice(itemParam.getPrice()); //데이터를 수정한다.
}
영속성 컨텍스트에서 엔티티를 다시 조회한 후 데이터를 수정하는 방법.
트랜잭션 커밋 시점에 변경이 감지(Dirty Checking)되고 이 동작에서 DB에 UPDATE Query를 실행한다.
병합 사용
@Transactional
void update(Item item) {
//itemParam: 파리미터로 넘어온 준영속 상태의 엔티티
Item mergeItem = em.merge(item); //병합사용
}
병합은 준영속 상태의 엔티티를 영속 상태로 변경할 때 사용한다.
-> merge()하는 값으로 아예 대체해버린다
정리
변경 감지 기능을 사용하면 원하는 속성만 변경이 가능하다.
하지만 병합의 경우 모든 속성이 변경된다.
그렇기 때문에 엔티티를 변경 할 때는 변경 감지 기능을 사용하는 것이 좋다.
병합을 사용 할 경우 특정 속성에 값이 없으면 null로 업데이트되기 때문에 사용 시 주의해야 한다.
'Spring' 카테고리의 다른 글
Spring을 이용한 API개발 - 조회 성능 최적화 (0) | 2021.10.11 |
---|---|
Spring을 이용한 API개발 - 기본 (0) | 2021.10.11 |
Spring JPA Entity 설계 시 주의점 (0) | 2021.10.11 |
Spring JPA 1:N 관계 설정 (0) | 2021.10.10 |
Spring Bean의 생명주기 (0) | 2021.10.10 |