让我解释一下我的情景......
说我有两张桌子:“路径”和“套餐” 路径表由“PathId”“StartNode”,“EndNode”组成 包表由“StartNode”,“DestinationNode”,“Paths”
组成我打算编写一个程序,使用任何最短路径算法计算从开始到目的地路由包的路径。
为了确保在计算路径时路径设置没有变化,我相信我应该使用“SELECT * FROM Paths FOR SHARE”来获取共享锁。因此,在计算路径并提交事务之前,不得更改路径的开始/结束,并且在任何时候 - 数据库中的计算路径始终有效。
问题是:我正在用NHibernate编写程序C#,我如何获得共享锁? 我试过了:
Session.QueryOver<Path>().Lock().Read.List()
但它没有神奇的效果。
Session.CreateSQLQuery()
是唯一的解决方案吗?
答案 0 :(得分:1)
据我所知NHibernate目前不支持SELECT ... FOR SHARE,但它确实支持FOR UPDATE和FOR UPDATE NOWAIT(参见lock modes),这当然更严格,但它可以工作
由于NHibernate是一个开源项目,你可以suggest this enhancement,当然也可以实现它。