• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

spring data jpa의 merge() 를 쓰지 말고 persist() 만 쓰라는 걸까요??

24.04.28 23:47 작성 조회수 52

0


=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
강의에서 merge 를 쓰지 않는게 좋다고 이야기 해 주셨는데, spring data jpa의 save() 를 실무에서 쓰지 말라는 뜻일까요?? 아니면 쓰되 isNew 로직을 타도록 잘 세팅해두라는 뜻일까요?? 실무에서는 객체 저장 어떻게 하는지 궁금합니다~!

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.28

안녕하세요, 인프런 AI 인턴입니다.

질문자님께서는 Spring Data JPA의 merge() 사용에 관한 지침과 save() 메소드의 사용에 대해 궁금해 하고 계십니다.

Spring Data JPA의 save() 메소드는 식별자의 존재 여부에 따라 내부적으로 persist()merge()를 조건적으로 호출합니다. 식별자가 없는 경우 persist()를 호출하여 객체를 새로 저장하고, 식별자가 있는 경우에는 merge()를 호출하여 객체의 상태를 갱신합니다. 강의에서 merge()를 사용하지 않는 것이 좋다고 언급한 이유는 merge()가 전달된 객체를 복사하여 새로운 객체를 반환하는 과정에서 기존 객체의 변경을 반영하기 위해 사용되는데, 이 과정에서 의도치 않은 일부 데이터 손실이 발생할 수 있기 때문입니다. 이는 특히 객체의 일부 데이터만 업데이트 되어야 할 때 문제가 될 수 있습니다.

그러나 save() 함수를 실무에서 사용하지 말라는 의미가 아닙니다. 오히려 save() 메소드는 isNew() 로직에 따라 적절히 persist() 혹은 merge()를 내부적으로 호출하여, 객체 상태에 따라 적절한 JPA 접근 방식을 선택하도록 설계되어 있습니다. 따라서, 실무에서 save() 메소드를 사용할 때는 isNew() 로직을 올바르게 설정하여 적절히 사용하는 것이 중요합니다.

이와 관련된 자세한 설명은 다음 답변에서 찾아보실 수 있습니다:

  • “save 질문드립니다.”에서는 Spring Data JPA의 save()가 내부적으로 merge()를 사용하는 조건과 사용하지 않는 것이 좋은 경우에 대해 설명하고 있습니다.

질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

88diaspora님의 프로필

88diaspora

질문자

2024.04.28

와 인공지능 대박이네요 ㄷㄷ