2017-08-16 20 views
3

有誰知道爲什麼Spring不允許在讀取操作中使用@Lock(LockModeType.PESSIMISTIC_WRITE)?爲什麼Spring不允許對讀操作進行獨佔鎖定?

@Lock(LockModeType.PESSIMISTIC_WRITE) 
Human findByNameAndStreet(String name, String street); 

而且爲什麼EntityManager本身允許您對讀取操作進行獨佔鎖定?底線,在春季同樣的選擇查詢我不能把寫鎖定,並與EntityManager我能夠。我不知道爲什麼春天不會讓你做同樣的事情。

+0

您對悲觀寫入鎖定有什麼影響? – SpaceTrucker

+0

對閱讀行進行獨佔鎖定。代碼流是特定的,所以第一個讀取事務應該鎖定該行,然後下一個應該等到第一個完成。我能夠用EntityManager實現它,但我想知道爲什麼Spring不會讓你對選擇查詢進行獨佔鎖定。 – alxbxbx

+1

我猜是因爲你的事務邊界是錯誤的(或不是)定義的。 –

回答

1

要使用鎖定,您必須具有適當的事務邊界。如果你沒有他們唯一的電話鎖將工作是findByNameAndStreet

但是,如果您要從本身是事務性的服務方法中調用此方法,那麼鎖將跨越整個事務性服務方法。

+0

正是我需要的答案。非常感謝! – alxbxbx