inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

영속성 컨텍스트 2

비영속과 준영속 질문 입니다! + persist 질문

377

hello

작성한 질문수 43

1

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 설명하실때 그림은 스냅샷 컬럼이 없어서 질문드립니다!

JPA java

답변 1

0

OMG

안녕하세요. hello님, 공식 서포터즈 OMG입니다.

비영속과 준영속의 차이는 처음에 말씀하셨던  '식별자가 있고 없고'  뿐이 아니라

영속성 컨텍스트에서 관리 되었던 적이 있냐 없냐 로 구분하시면 됩니다.

-

비영속

아래의 강의자료를 보시면 객체를 생성한 시점을 나타내므로 영속성 컨텍스트에서 관리된 적이 없습니다.

준영속(=detached상태)

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

모호하게 알고 있었던 점이 해결되셨으면 좋겠네요

감사합니다.

0

hello

답변 감사합니다 1번질문에서 준영속과 비영속의 차이는 이해되었습니다! 그런데 "비영속상태도 식별자를 가질 수 있다!" 라는 것은 맞는건가요?

0

OMG

네 맞습니다.

두 가지만 알고 계시면 됩니다.

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