Java for Web學習筆記(一三八)篇外之資料庫的ACID和JPA(2)JPA
阿新 • • 發佈:2019-02-15
在測試中,我們發現在一個JPA事務中:
- Spring Data的寫SQL是在最後commit前發出,這最大程度地縮短了寫操作和commit之間的時間。
- 對相同的ID的讀,JPA只從資料庫中讀取一次。
- 從資料庫中獲取entity,修改entity的資料,即使最後沒有執行save,在commit之前,傳送update。
下面是其中一個測試小例子:
@Transactional public void acidTest() { TestAcidEntity entity1 = testAcidRepository.findOne(1L); sleep(2); entity1.setScore(entity1.getScore() + 1); testAcidRepository.save(entity1); sleep(4); TestAcidEntity entity2 = testAcidRepository.findOne(2L); entity2.setScore(entity2.getScore() + 10); sleep(2); testAcidRepository.save(entity2); //可以將此註釋掉,觀察是否有update訊息 } private void sleep(int secs) { try { Thread.sleep(secs * 1000); } catch (InterruptedException e) { } }
通過網路抓包(將jdbc連線引數加上useSSL=false)進行觀察:
程式碼順序:select1 → 2秒 → update1 → 4秒 → select2 → 2秒 → update2 → commit 網路抓包顯示的SQL順序 :select1 → 6秒 → select2 → 2秒 → update1 → update2 → commit