<TIL> 68. JPA | save() vs saveAndFlush()

YUJIN LEE·2023년 3월 20일
0

개발log

목록 보기
63/149

save기능
-> 객체지향 설계 중심에서의 Entity 객체를 ORM을 이용하여 데이터베이스에 저장하는 기능

save()

save() 메소드는 entity를 DB에 저장하는 기능을 수행.
save() 메소드는 Spring Data에서 정의한 CrudRepository 인터페이스의 메소드.

보통 하이버네이트는 메모리에 영속 가능한 상태 유지.
이 상태를 DB에 동기화 하는 것을 flushing이라고 함.
우리가 save()메소드를 수행할 때, 처리되는 데이터는 flush() or commit() 메소드가 실행되기 전까지 DB로 flush 되지 않음.
즉, 우리가 하이버네이트로 구현한 JPA를 사용할 때, 특정 구현체가 flush() 또는 commit() 동작을 관리.
commit을 수행하지 않고 직접 flush를 수행한다면, 트랜잭션 외부에서 알 수 없다.
-> save() 메소드는 바로 DB에 저장X
영속성 컨텍스트에 저장되었다가 flush() or commit() 수행 시 DB 저장.
실제 DB 저장은 추후 flush 또는 commit 메소드가 실행될 때 이루어짐.

saveAndFlush()

Spring Data JPA에서 정의한 JpaRepository 인터페이스의 메소드.
실행중(트랜잭션)에 즉시 data flush.
이 메소드가 주로 사용되는 상황은, 아직 commit 되지 않은 길은 트랜잭션 내에서 먼저 처리된 결과를 후에 사용할 때 사용.
예를 들어, 우리가 저장할 예정인 entity의 속성을 기대하는(참조할 예정인) 스토어드 프로시저가 실행되어야 할 때 save()메소드는 db에 동기화 시키지 않았기 때문에 스토어드 프로시저는 변경 사항에 대해 알 수 없다. -> 제대로 동작 X
-> saveAndFlush() -> 즉시 DB에 변경사항 적용 -> 즉시 DB에 데이터 반영

profile
인정받는 개발자가 되고싶습니다.

0개의 댓글