인프런 커뮤니티 질문&답변

SeokHoon Kim님의 프로필 이미지
SeokHoon Kim

작성한 질문수

실전! 스프링 데이터 JPA

Specifications (명세)

Merge 관련해서 질문드립니다.

작성

·

153

0

안녕하세요 영한님,

 

정말 좋은강의 잘 듣고있습니다. Merge관련해서 질문이 하나있는데요..!

 

아래 두 method 모두 시작할때 persistence context가 비어있고 찾는 entity가 db에 있다고 가정할때 비슷한 (혹은 같은) flow로 진행될까요? 여기서 method parameter, Entity e,는 업데이트될 (id가 set되어있고 field가 업데이트 되어있는)객체입니다.

 

@Transactional
public void updateEntity(Entity e){
Entity foundEntity = em.find(Entity.class, e.getid());
foundEntity.setFieldOne("New Data");
}
@Transactional
public void updateEntity(Entity e){
em.merge(e);
}

Merge를 꼭 써야하는건 아니지만, 그냥 동작 메커니즘이 궁금해서 질문드립니다. Merge를 쓰는게 Update전에 항상 Select query로 db에서 객체를 조회하기때문에 쓰기를 지양하라고 하시는건가요, 아니면 merge를 쓸때 또 다른 downside가 있나요?

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. SeokHoon Kim님

올려주신 코드는 내부에서 같은 방식으로 작동하기 때문에 사용에 차이가 없습니다.

그보다는 merge를 제공하는 이유에 맞게 사용하면 괜찮습니다.

merge는 준영속 상태가 된 엔티티를 다시 영속 상태로 만들 때 사용합니다.

해당 목적이라면 충분히 사용하셔도 괜찮습니다.

두번째 예시는 이 예시에 부합하는 것으로 보입니다.

감사합니다.

SeokHoon Kim님의 프로필 이미지
SeokHoon Kim
질문자

답변 감사합니다 🙂 강의가 너무 좋습니다. 5년동안 개발자하면서 배운것보다 강의 몇개보는게 훨씬 개념이 탄탄해지는 느낌이라 이미알고있는 부분까지도 모두 영한님 강의로 다시듣중입니다. 환절기 감기조심하시고 항상 좋은강의 부탁드릴게요!

김영한님의 프로필 이미지
김영한
지식공유자

SeokHoon Kim님도 환절기 감기 조심하시고 크게 성장하는 2024년 되세요 :)

SeokHoon Kim님의 프로필 이미지
SeokHoon Kim

작성한 질문수

질문하기