반응형
준영속 엔티티
식별자가 존재하지만 영속성 컨텍스트가 더는 관리하지 않는 엔티티
- JPA가 관리하지 않는다
- 변경감지가 일어나지 않는다
준영속 엔티티 수정하는 방법
1. 변경 감지 기능 사용
1) id 식별자를 이용해서 기존 entity를 조회
2) 조회한 엔티티는 영속성 컨텍스트에서 관리됨
3) 조회한 엔티티에 setter를 이용해서 값을 넣어주면 트랜잭션 커밋 시점에 flush를 날리면서 변경 감지 작동
2. 병합(merge) 사용
em.merge(item);
JPA가 준영속 엔티티의 식별자 값으로 영속성 컨텍스트에서 entity를 찾고 없으면 DB에서 조회 후 모든 필드를 바꿔줌
(1번에 적어놓은 과정을 모두 JPA가 알아서 해줌)
주의! 병합을 쓸 경우 모든 필드를 교체
[꿀팁 번외편]
데이터를 바꿀 때 setter를 사용하기 보다는 의미있는 메서드를 만든 후 메서드를 이용해서 바꾸자(추적, 유지보수 용이)
setName, setAge : X
change(name, age) : O
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
강의를 들으며 정리한 내용입니다 :)
반응형
'개발 > JPA' 카테고리의 다른 글
[JPA] 즉시로딩과 N+1 문제 (0) | 2022.10.24 |
---|---|
실전! 스프링 부트와 JPA활용 1 :: JPA와 DB 설정, 동작확인 - 테스트 실행 도중 에러 정리 (0) | 2022.10.22 |
[JPA] 지연로딩과 조회 성능 최적화 2 - fetch join, DTO로 조회 (0) | 2022.04.19 |
[JPA] 지연로딩과 조회 성능 최적화 1 - xToOne (0) | 2022.04.18 |
[JPA] JPQL fetch join / 연관된 entity 한번에 select / distinct로 엔티티 중복 제거 / fetch join 페이징 안 될 때 @BatchSize 설정 (0) | 2022.04.12 |
댓글