我發現了很多關於此主題的帖子,但所有答案只是鏈接到沒有示例代碼的文檔,即如何在實踐中使用併發。Spring中的Hibernate併發性
我的情況:我有一個實體House
與(爲簡單起見)兩個屬性,number
(id)和owner
。數據庫使用10 Houses
和number
1-10和owner
總是null
進行初始化。
我想分配一個新的所有者到目前沒有所有者,最小的number
。我的代碼如下所示:
@Transactional
void assignNewOwner(String newOwner) {
//this is flagged as @Transactional too
House tmp = houseDao.getHouseWithoutOwnerAndSmallestNumber();
tmp.setOwner(newOwner);
//this is flagged as @Transactional too
houseDao.update(tmp);
}
對於我的理解,儘管使用了@Transactional
,同樣House
可以兩次分配給不同的業主,如果兩個請求獲取相同的空House
爲tmp
。我如何確保這不會發生?
我知道,包括在更新中選擇空的House
會解決問題,但是在不久的將來,我想修改/使用更多的tmp
對象。
'houseDao.update(tmp);'是不必要的,因爲'tmp'是一個託管實體(您處於事務性方法)。這些更改將被保留,而不需要單獨的update()。 – Kayaman