Udemy Course Spring JPA 9
在CourseRepository中加入新Method=>playWithEntityManager
注意! 在playWithEntityManager()內只做三件事
- 建一個Course物件(課程名稱帶Web Service in 100 steps)
- 將上述物件INSERT進DB
- 改寫上述物件的課程名稱為:Web Service in 100 steps — Update!!!!!!!!!
(也就是將這物件名稱改寫
但沒有再用EntityManager的merge(即update)進DB)
接著在DemoApplication呼叫playWithEntityManager
執行得
進http://localhost:8090/h2-console觀察
綜上所述,當物件由EntityManager接手後(如上em.persist(course);)
EntityManager就會一直追著這個course物件!!
只要對該course物件進行操作,EntityManager將會把DB資料同步改寫
所以在course.setName後我們不用再補上em.merge(course)
繼續討論EntityManager如何控制Entity物件
改寫playWithEntityManager Method
再執行DemoApplication得
講解playWithEntityManager()
過程建了兩個Course,course1 & course2
一個是Web Service開頭,一個是Angular Service開頭
利用EntityManager的flush(),每異動一部分就連動到DB
但是course2在INSERT結束後使用EntityManager的detach()功能
將course2踢除於EntityManager管理
所以此時再做course2改寫名子就不再同步到DB了
同理改寫playWithEntityManager()
用EntityManager的clear()將所有管控的Entity物件替無控制
執行DemoApplication得
執行的course1.setName & course2.setName都將不會造成DB內的資料改變