- data jpa 에서의 save 메서드의 내부 로직은 이렇다
public <S extends T> S save(S entity) {
Assert.notNull(entity, "Entity must not be null");
if (entityInformation.isNew(entity)) {
entityManager.persist(entity);
return entity;
} else {
return entityManager.merge(entity);
}
}
- 주어진 엔티티가 일단 새로운 엔티티인지 아닌지를 판단한다.
- 이는 entityInformation.isNew(entity) 를 통해 이루어진다.
entityInformation
은 엔티티에 대한 메타데이터를 제공하는 클래스이며
isNew
- 는 엔티티가 새로운 것인지 아닌지를 판단하는 로직을 포함한다.
- 이는 entityInformation.isNew(entity) 를 통해 이루어진다.
- 엔티티가 새로운 엔티티라면
- persist 를 통해 엔티티를 저장한다.
persist
는- 새로운 엔티티를 영속화하는 역할을 한다.
- persist 를 통해 엔티티를 저장한다.
- 엔티티가 새로운 엔티티가 아니라면
- merge 를 통해 엔티티를 저장한다.
merge
sms- 준영속 상태의 엔티티를 영속화하고, 영속성 컨텍스트가 관리하는 새로운 엔티티를 반환한다.
- merge 를 통해 엔티티를 저장한다.
즉, 영속화한다고 생각하면된다.
영속화만 진행하기에 실제 트랜잭션안에서 커밋이 이루어진 경우에만 쿼리가 날아가게 되는 것이다.
Uploaded by N2T
'자바 > JPA' 카테고리의 다른 글
[JPA] 트랜잭션 롤백 시 주의 해야할 점! (0) | 2023.11.19 |
---|---|
[JPA] 영속성 컨텍스트가 같을 때의 엔티티의 비 (0) | 2023.11.19 |
[JPA] 영속성 컨텍스트가 다를때의 비교 (0) | 2023.11.19 |
[JPA] 프록시의 동등성 비교법 (0) | 2023.11.19 |
[JPA] 그 유명한 N+1 문제 (0) | 2023.11.19 |