2012-07-12 108 views
0

我有一個類的自定義ID生成器。當我創建這個類的新實例並使用.save()將其保存到數據庫時,以及實際生成的ID是哪個點?這個世代是否延遲到交易完成之前,還是在我調用.save()時生成?休眠和ID生成器:在哪一點生成的ID?

+0

參見http://stackoverflow.com/questions/9087848/when-does-the-jpa-set-a-generatedvalue-id – Raedwald 2012-08-25 11:12:23

回答

1

該id是在保存時生成的。

,如果你是在一個事務中,你有兩個選擇提交或回滾

+0

好吧,所以在交易中,如果我通過保存運行實例,那麼該實例將收到一個ID,對吧?此外(不同但略有相關),我瞭解版本控制將在flush/commit中應用。你會碰巧知道這是對的嗎? – sbrattla 2012-07-12 13:43:05

+0

請考慮以下事項:客戶端A和B加載相同的記錄R.過了一段時間A後,數據發生更改後提交R,過了一會兒B也提交了......更改了R的數據 - 但未提交A後的R狀態。 自動版本控制功能可以執行以下操作:使用字段來對行數據進行版本控制。在上述場景中,A和B獲得版本t的記錄R.在提交A之後版本被更改,所以當B嘗試提交對版本失敗的檢查時。 – 2012-07-12 13:49:01

+0

感謝您的輸入! – sbrattla 2012-07-12 13:50:41