Udemy Course Spring JPA 10

深入EntityManager 踩雷!! PART II

ZONGRU Li
3 min readApr 26, 2019

EntityManager的另一功能=>refresh

在course1 & course2 都使用setName後只針對course1做refresh

之後做整個EntityManager的flush

在playWithEntityManager內設個中斷點

然後用Debug mode從DemoApplication觀察

在em.persist(course1)時,id還是null

(尚未透過JPA寫值進DB,再這之前,JPA也尚未給序號)

當過了em.persist(course1);後

course1就取得id為1(JPA預先給序號,但注意此時course1還沒寫進DB)!!

過了em.flush();後才會看到上面console有出現兩筆INSERT

Debug mode到了em.refresh(course1);(如上圖)

course1的name已經變為有Update的字串

Debug mode來到em.flush();

可以見到course1因為經過refresh已經變回原本沒有Update的字串

之後過了em.flush();(意即em.flush();執行了)

那麼就只會觸發一筆資料UPDATE =>沒有被refresh的coures2

(在Debug mode下去看H2-console會看不到上述coures1 & course2之資料)

改正常執行DemoApplication

可以見到:

目前專案筆記在"SpringJPA深入0426"內

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet