jpa 의 중요한 개념인 entity의 상태와
상태를 전이시키는 cascade 옵션을 봐보자
@OneToMany 나 @ManyToOne 을 보면 Cascade 를 쓸 수 있는데
이게 엔티티의 상태 변화를 연관되어있는 Account 에도 상태 변화를 알려주는것
Study 의 상태를 A에서 B로 바꿀때 Account 에도 변한 상태를 주고 싶을때 사용
Entity 의 상태는 4가지가 있다.
이렇게 만든 상태가 Transient , jpa 가 전혀 모르는 상태
이렇게 저장을 하면 이제 JPA 가 아는 상태로 바뀐다.
db 에 객체가 바로 들어간건아니다
하이버네이트가 persistent 상태로 관리를 하고 있다가
이쯤되면 데이터베이스에 싱크업을 해야겟따
그 시점에 실제 데이터를 넣는것
바로 insert 쿼리가 발생하는건 아니다.
이제 jpa 가 관리하는 객체가 된다.
이 상태에선 하이버네이트가 해주는게 여러개 있는데 일단
1차캐시가 있다.
1차 캐시란 이미 세션에 저장이 된 것 @PersisteneceContext에 이 인스턴스가 저장이 된것이다
이제 이 인스턴스는 캐시가 된 상태가 된다.
캐시 되어있기 때문에 이 밑에서 load 를 해도 select 를 하지 않고
데이터를 받을 수 있다.
트랜잭션이 끝났을때 인서트가 발생한다.
setUserName 을 하고 뒤에 update문이 없는데도
실제 update 가 발생한다.
이게 바로 dirty checking
트랜잭션이 끝나고 밖에서 이 객체를 사용될때는 Detached 로 변경된다
jpa가 관리 했던 객체
Removed 는 실제 커밋이 일어날때 삭제 된다.
Cascade 는 바로 이런 상태 변화를 전이 시키는 것이다.
PERSIST 저장할때 저기에 전파를 하라고 설정을 해두면
해당 mapped 된 곳에 같이 저장 된다
참조하고 있던 객체들도 전부 Persist 상태가 된다.
'Spring > jpa' 카테고리의 다른 글
[spring data jpa] spring data jpa 소개 및 원리 (0) | 2020.12.17 |
---|---|
[spring data jpa] jpa query (0) | 2020.12.17 |
[spring data jpa] - 프로젝트 셋팅, 맵핑 (0) | 2020.12.16 |
[spring data jpa] - ORM 패러다임 불일치 (0) | 2020.12.16 |
[spring data jpa] - ORM (0) | 2020.12.16 |