인프런 커뮤니티 질문&답변
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
작성
·
19
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예/
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 아니오
[질문 내용]
수정 또는 삭제시에 한번 find 메서드를 호출해서 select하여 데이터의 값을 영속성 컨텍스트에 올려놓은뒤에 수정 또는 삭제시에는 객체의 값만 바꾼후에 commit 을 통해 쿼리가 날라간다고 설명해주셨는데,
보통 수정또는 삭제시에 객체를 조회하지않고 바로 update 또는 delete 쿼리를 사용하는데
jpa를 사용하면 무조건 find 메서드를 통해 select후에 update 또는 delete작업을 해야되는건가요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. infbackendj님.
JPA에서는 엔티티를 수정하거나 삭제할 때, 일반적으로 find 메서드를 사용하여 먼저 엔티티를 영속성 컨텍스트에 올리게 됩니다. 이는 JPA의 영속성 컨텍스트가 변경 감지를 통해 update 쿼리를 자동으로 생성하게 하는 핵심 기능이기 때문입니다.
수정 작업(Update)
JPA에서 엔티티의 수정은 기본적으로 변경 감지를 통해 이루어집니다. 영속성 컨텍스트의 엔티티를 변경함으로써, JPA는 자동으로 update 쿼리를 생성합니다. 따라서 직접적인 update 쿼리를 작성할 필요 없이 영속 상태의 엔티티 값을 변경하고 트랜잭션을 커밋하면 됩니다.
삭제 작업(Delete)
삭제를 위해서도 마찬가지로 객체를 영속성 컨텍스트에 올리고 remove 메서드를 사용해 삭제를 처리합니다. 즉, delete 쿼리를 쓰기 이전에 해당 엔티티를 find로 조회하여 영속 상태로 만들어야 JPA의 기능을 제대로 활용할 수 있습니다.
추가적인 참고 사항:
- 직접 쿼리 실행: 때에 따라 적절한 JPA 기능을 우회하고 싶다면
JPQL을 사용하여 직접update또는delete쿼리를 작성하고 실행할 수도 있습니다.
- JPA의 특징: JPA의 기본 철학은 객체와 관계형 데이터베이스 간의 매핑을 통한 객체지향적인 데이터베이스 액세스입니다. 따라서 JPA를 쓸 때는 영속성 컨텍스트와 트랜잭션 관리에 대한 이해가 필요합니다.
관련된 질문으로 다음 URL이 유용할 수 있습니다:
- 파악해야 할 JPA 업데이트와 삭제의 동작 방식과 관리 방법
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





