讓我解釋一下我的情況...NHibernate的與SELECT FOR SHARE在PostgreSQL的
說我有兩個表:「路徑」和「包」 路徑表是由「PATHID」「的StartNode」 ,「EndNode」 軟件包表由「StartNode」,「DestinationNode」,「路徑」
我打算編寫一個程序,它使用任何最短路徑算法計算從開始到目的地的路徑。
爲了確保路徑設置不會在我計算路徑時發生變化,我相信我應該使用「SELECT * FROM Paths FOR SHARE」來獲取共享鎖。因此,直到路徑被計算並且事務被提交之前,路徑開始/結束必須不被改變,並且在任何時刻 - 數據庫中計算的路徑總是有效的。
問題是:我正在用NHibernate編寫C#程序,我如何獲得共享鎖? 我曾嘗試過:
Session.QueryOver<Path>().Lock().Read.List()
但它並沒有做到這一點。
是Session.CreateSQLQuery()
唯一的解決方案?
我不認爲樂觀鎖定的作品。爲了簡單起見,我們假設Packages.Paths是一對多映射到Paths.PathId。然而,由於我沒有修改Path對象本身,而只是引用它,所以樂觀鎖定不會啓動。 – HelloSam 2011-01-06 06:37:21
@HelloSam:你是對的,我更新了我的答案。 – 2011-01-06 06:42:11