준영속 상태와 비영속 상태의 차이점
427
작성한 질문수 2
[질문 내용]
준영속 상태와 비영속 상태의 차이점에 대해 이해한바는 다음과 같습니다.
비영속 상태 : 한번도 엔티티 매니저의 관리를 받아본적 없는 엔티티
준영속 상태 : 엔티티 매니저의 관리를 받다가 연결을 끊음으로써 더이상 관리 받지 않고있는 상태.
제가 아는 차이점은 이것 뿐인데 혹시나 이게 두 상태의 차이점의 전부라면 굳이 상태를 나눌 필요가 있나? 라는 생각이듭니다.
그냥 '준영속 상태' 라는 단계를 없애고
연결이 끊기면 비영속 상태로 ,
다시 연결을 맺으면 영속 상태로
이렇게 단계를 줄여도 되지 않을까요?
혹시나 제가 모르거나 잘못이해하고 있는점이 있다면 알려주시면 감사드리겠습니다!!
답변 1
2
안녕하세요, 인프런 AI 인턴입니다.
비영속 상태와 준영속 상태를 나누는 것에 의문을 가지신 것으로 보입니다. 두 상태의 차이를 이해하셨듯이, 비영속 상태는 엔티티가 엔티티 매니저에 의해 관리된 적이 전혀 없는 상태를 의미합니다. 반면, 준영속 상태는 엔티티가 이미 한 번 영속 상태였으나 어떠한 이유로 엔티티 매니저와의 관리 연결이 끊긴 상태를 말합니다.
이 두 상태가 구분되는 이유는 JPA에서 엔티티의 생명주기 관리에 대한 세밀한 컨트롤을 가능하게 하기 위함입니다. 준영속 상태의 엔티티는 이미 한 번 영속 상태였던 엔티티로 해당 엔티티의 상태 변화, 식별자 존재 여부, 버전 정보 등이 관리되었을 수 있습니다. 반면 비영속 상태는 처음 만들어진 새로운 엔티티로서 이러한 관리 정보가 전혀 없을 수 있습니다.
또한 JPA를 사용하는 경우에는 준영속 상태와 영속 상태 간의 전환을 하는 다양한 작업들이 있을 수 있습니다. 예를 들어, merge() 작업을 통해 준영속 상태의 엔티티를 다시 영속 상태로 만들 수도 있습니다. 반면 비영속 상태의 엔티티는 단순히 persist() 작업을 통해 영속 상태로 만들 수 있습니다.
정리하자면 두 상태를 구분하는 것은 엔티티의 현재 상태에 대한 정확한 이해와 올바른 생명주기 관리를 위해서 필요합니다. 상태 관리를 통해 JPA는 좀 더 효과적으로 데이터베이스와의 작업을 수행할 수 있게 해주며, 애플리케이션 개발자에게 더 많은 유연성을 제공합니다.
비영속 상태와 준영속 상태의 관리 및 전환 로직에 대해 더 자세히 알고 싶으시다면 JPA 관련 도큐먼트를 추가로 확인하시면 도움이 될 것입니다.
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
55
2
inheritance startegy 선택시 고려사항
0
38
1
Entity 동등성 비교
0
40
1
실무 조언 관련 질문입니다.
0
65
1
H2데이터베이스 파일 생성
0
76
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
67
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
62
1
JPQL 메소드와 락
0
62
1
Delivery @OneToOne
0
70
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
104
2
UnsupportedOperationException 발생
0
97
3
H2 Database 연결이 안됩니다.
0
101
2
연관관계 매핑 질문드립니다.
0
94
2
h2데이터베이스 실행오류
0
114
2
persistence.xml
0
119
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
87
1
영속성 컨텍스트
0
74
1
JPA 프록시
0
105
1
Native Query와 MyBatis
0
81
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
97
1
임베디드 타입 예시 코드 관련 질문
0
125
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
101
3
인텔리제이 패키지 커서 단축키 질문
0
112
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
152
1





