[SPRING] 스프링 데이터 JPA가 entityManager.persist (...) 또는 entityManager.merge (...) 메소드를 호출하는 방법
SPRING스프링 데이터 JPA가 entityManager.persist (...) 또는 entityManager.merge (...) 메소드를 호출하는 방법
entityManager.persist (...) -Method가 호출되고 springData jpa에서 entityManager.merge (...)가 호출 될 때. 문서에 따르면 : 엔티티가 아직 지속되지 않았다면 Spring Data JPA는 entityManager.persist (...) -Method에 대한 호출을 통해 엔티티를 저장합니다. 그렇지 않으면 entityManager.merge (...) - 메소드가 호출됩니다.
그렇다면 스프링 데이터가 엔티티가 지속되는지 여부를 어떻게 결정합니까?
해결법
-
==============================
1.다음은 SimpleJpaRepository의 save 메소드의 impl입니다.
다음은 SimpleJpaRepository의 save 메소드의 impl입니다.
/* * (non-Javadoc) * @see org.springframework.data.repository.CrudRepository#save(java.lang.Object) */ @Transactional public <S extends T> S save(S entity) { if (entityInformation.isNew(entity)) { em.persist(entity); return entity; } else { return em.merge(entity); } }
그래서 그것은 entityInformation.isNew (entity)를 봅니다. 이 메소드의 구현은 (AbstractPersistable에서) :
public boolean isNew() { return null == getId(); }
그래서 그것은 id 필드를 기반으로 결정합니다.
from https://stackoverflow.com/questions/27573023/how-spring-data-jpa-decides-to-call-entitymanager-persist-or-entitymanager-me by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] ContextLoaderListener로드 중 ClassNotFoundException (0) | 2019.03.21 |
---|---|
[SPRING] 스프링 부트 ResourceLocations는 css 파일을 추가하지 않으므로 404가됩니다. (0) | 2019.03.21 |
[SPRING] 스프링 2.5에서 셧다운 훅 등록하기 (0) | 2019.03.21 |
[SPRING] 봄 부팅 : 구성 Sqlite 데이터베이스 (0) | 2019.03.21 |
[SPRING] current_session_context_class 등록 정보 사용 최대 절전 모드 3 최대 절전 모드 4 (0) | 2019.03.21 |