jpa 라이프사이클

Tae hyun·2023년 2월 14일
0

결과행이 존재하지 않는다 싶을 때에는 null값 반환
존재한다면 entity객체 반환

c1.setName("c3자바");
repository.save();

save 메서드를 호출하면
엔티티 객체 내용과 스냅샷의 결과 내용 비교

비교 결과 다르다면 sql저장소에 update sql 저장
그리고 스냅샷 내용을 비교

Customer c2 = new Customer("id5", "p5","n5")

자바 객체를 save 메서드 호출하게되면 보라색 형태에 해당하는 엔티티 객체는 존재하지 않는다
save 메서드 호출시 1차캐시에 id에 해당하는 엔티티 객체 생성->sql저장소에 insert sql저장


같다 싶으면 아무작업도 하지 않는다.
update sql만드는 케이스, insert sql을 만드는 케이스가 아니면 크게 하는일이 없다.

repository.delete(c1)l
delete도 엔터티 객체가 존재여부를 확인하고 엔터티 객체가 없으면 아무작업도 하지 않음
있으면 sql 저장소에 delete sql구문을 저장시켜놓음

snapshot은 find메서드나 save메서드실행

save메서드는 값을 변경하고 저장

delete메서드는 반드시 findbyid를 하고난 다음에 delete를 해줘야함
update작업을 하고 싶어도 findbyid를 하고 난 다음 save메서드를 호출하여 update구문 실행가능

delete 작업을 진행할 때 1차캐시에 있던 엔티티, 스냅샷에 있는 복제본을 제거한다.
delete sql구문은 커밋메시지에 의해 처리가 됨
커밋메서드를 호출하지 않으면 db에 전달되지 않음
스프링 jpa에서는 자동커밋이 되도록 설정되어있기 때문에 커밋이 자동으로 되는것임

한꺼번에 커밋되게하기위해 sql저장소가 필요한 것임
entity 객체 단위로 커밋, 롤백을 하기위해 sql저장소가 마련되어서 각각의 작업(delete,update 등)이 한꺼번에 처리되어야 함

라이프사이클 상태도
스냅샷 내용과 비교해서 같을경우엔 아무것도 안하고 다를경우에만 저장

profile
안녕하세요 개발하는 알파카입니다. https://github.com/oh-taehyun

0개의 댓글