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
반응형
'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 |