NHibernate在PostgreSQL中使用FOR SHARE进行SELECT

时间:2011-01-06 02:27:14

标签: nhibernate postgresql locking

让我解释一下我的情景......

说我有两张桌子:“路径”和“套餐” 路径表由“PathId”“StartNode”,“EndNode”组成 包表由“StartNode”,“DestinationNode”,“Paths”

组成

我打算编写一个程序,使用任何最短路径算法计算从开始到目的地路由包的路径。

为了确保在计算路径时路径设置没有变化,我相信我应该使用“SELECT * FROM Paths FOR SHARE”来获取共享锁。因此,在计算路径并提交事务之前,不得更改路径的开始/结束,并且在任何时候 - 数据库中的计算路径始终有效。

问题是:我正在用NHibernate编写程序C#,我如何获得共享锁? 我试过了:

Session.QueryOver<Path>().Lock().Read.List()

但它没有神奇的效果。

Session.CreateSQLQuery()是唯一的解决方案吗?

1 个答案:

答案 0 :(得分:1)

据我所知NHibernate目前不支持SELECT ... FOR SHARE,但它确实支持FOR UPDATE和FOR UPDATE NOWAIT(参见lock modes),这当然更严格,但它可以工作

由于NHibernate是一个开源项目,你可以suggest this enhancement,当然也可以实现它。