비영속과 준영속 질문 입니다! + persist 질문
377
작성한 질문수 43
1. 안녕하세요 https://www.inflearn.com/questions/31193 의 답변 내용을 참고하여 질문 드립니다.
비영속과 준영속의 차이는 '식별자가 있고 없고' 뿐이다 라고 생각했는데 저기에 답변을 보면 @Id로 선언한 변수가 member.setId() 등을 통해 초기화가 되었다면 식별자가 있는 것이다 라고 이해했습니다. 그럼 비영속 상태이더라도 식별자를 가질 수 있다는 건데 결론적으로 비영속과 준영속의 차이는
비영속 : 한번도 영속상태가 되지 않음.
준영속 : 영속 상태였다가 비영속 상태가 됨
의 느낌으로 이해하는 것이 맞을까요?
2.
이 코드를 실행했을때 insert와 update 2개 쿼리가 실행됩니다. 그러면
1. persist 할때 쓰기지연 저장소에 create문과 영속성 컨텍스트 Entity와 스냅샷에 값 추가
2. setName 호출시 Entity 값이 변경됨
3. 트랜젝션이 커밋되어 flush가 일어나면 영속성 컨텍스트에서 더티체킹을 실행. 이때 member의 Entity와 스냅샷의 name 값이 다르니 update 쿼리를 쓰기지연 저장소에 추가
4. create와 update 문 실행
이게 맞을까요?? persist 설명하실때 그림은 스냅샷 컬럼이 없어서 질문드립니다!
답변 1
0
안녕하세요. hello님, 공식 서포터즈 OMG입니다.
비영속과 준영속의 차이는 처음에 말씀하셨던 '식별자가 있고 없고' 뿐이 아니라
영속성 컨텍스트에서 관리 되었던 적이 있냐 없냐 로 구분하시면 됩니다.
-
비영속
아래의 강의자료를 보시면 객체를 생성한 시점을 나타내므로 영속성 컨텍스트에서 관리된 적이 없습니다.

준영속(=detached상태)
비영속 상태의 객체를 persist를 호출함으로써 영속상태(=영속성 컨텍스트에 들어가 있는)로 만들었지만 detach()로 인해 영속성 컨텍스트에서 분리된 상태


모호하게 알고 있었던 점이 해결되셨으면 좋겠네요
감사합니다.
0
네 맞습니다.
두 가지만 알고 계시면 됩니다.
1. 기본키는 직접 할당해줄 수있고, 자동생성전략을 사용해서 할당 받을 수 있다.
전자는 @Id만 사용하는 것. 후자는 @Id @GeneretedValue를 사용하는 것입니다.
2. 비영속 객체가 영속 상태가 되려면 식별자를 반드시 갖고 있어야 한다.
직접 할당해주는 방법일 땐 할당이 되어있어야 하고, 자동생성전략을 이용하는 경우 persist() 호출 시점에 값의 할당이 이뤄집니다.(코드 레벨로 찾아가 보려 했는데 정확한 부분은 잘 모르겠습니다.)
그래서 결국 "비영속상태도 식별자를 가질 수 있다!" 의 답변 YES 입니다.
벌크연산에서 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





