본문 바로가기
Java Spring/MVC

em.flush() vs tx.commit()

by GGShin 2022. 7. 23.

em.flush() 와 tx.commit()의 차이는 무엇일까요?

tx.commit()을 하면 내부적으로 em.flush()가 수행된다고 합니다. 

em.flush()는 데이터를 DB에 저장해주는 역할을 하는데, tx.commit()도 DB에 데이터를 저장하는 용도로 알고 있었기 때문에 

tx.commit()은 em.flush()외에 추가적으로 어떤 기능을 하는 것인지 궁금해졌습니다.

 

1
2
3
4
5
em.flush() 
- It saves the entity immediately to the database 
with in a transaction to be used further and it can be rolled back.
 
em.getTransaction().commit
- It marks the end of transaction and saves all the changes
 with in the transaction into the database and it can't be rolled back.
cs

 

구글링에서 얻은 답변인데 해석해보면,

 

em.flush()는 entity를 DB에 바로 저장해주고 추후에 transaction이 수행되어야 하며, roll back 될 수 있습니다.

tx.commit()은 transaction릏 종료하는 것이고, transaction 중에 일어난 모든 변화를 DB에 저장하며, roll back 될 수 없습니다.

 

결국 em.flush()는 DB에 데이터만 저장하는 것이고 tx.commit()을 해줘야만이 완벽하게 transaction이 종료되는 것이라는 걸 알 수 있었습니다.

 


참고자료

https://codehunter.cc/a/spring/jpa-flush-vs-commit

 

JPA flush vs commit

 

codehunter.cc

 

반응형

'Java Spring > MVC' 카테고리의 다른 글

Model interface  (6) 2022.08.20
@Controller와 @RestController의 차이점  (3) 2022.08.06
Spring Rest Docs 만들기  (1) 2022.07.19
Mockito 적용하여 Controller test 해보기  (0) 2022.07.18
Entity mapping-Cascade의 역할  (0) 2022.07.17