要在PostgreSQL中为共享选择的NHibernate

要在PostgreSQL中为共享选择的NHibernate,nhibernate,postgresql,locking,Nhibernate,Postgresql,Locking,让我解释一下我的情况 假设我有两个表:路径和包 Paths表由PathId StartNode和EndNode组成 Packages表由StartNode、DestinationNode和路径组成 我将编写一个程序,使用任何最短路径算法计算将包从起点路由到目的地的路径 为了确保在计算路径时路径设置没有改变,我认为应该使用SELECT*FROM paths FOR SHARE来获得共享锁。因此,在计算路径并提交事务之前,不得更改路径开始/结束,并且在任何时候,数据库中计算的路径始终有效 问题是:我

让我解释一下我的情况

假设我有两个表:路径和包 Paths表由PathId StartNode和EndNode组成 Packages表由StartNode、DestinationNode和路径组成

我将编写一个程序,使用任何最短路径算法计算将包从起点路由到目的地的路径

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

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

Session.QueryOver<Path>().Lock().Read.List()
但它并没有起到神奇的作用


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

据我所知,NHibernate目前不支持SELECT…FOR SHARE,但它确实支持UPDATE和UPDATE NOWAIT see,这当然更严格,但它可以工作


由于NHibernate是一个开源项目,您可以并且当然可以实现它。

我认为乐观锁定不起作用。为了简单起见,让我们假设Packages.path是一对多映射到path.PathId的。但是,由于我没有修改路径对象本身,而只是引用它,所以乐观锁定不会生效。