hibernate查询使用nolock时出现识别错误
A recognition error occurred when nolock is used in hibernate query
我有一个简单的休眠查询,在查询中使用了 nolock。我收到错误 - 发生识别错误并且休眠错误抛出异常:'NHibernate.Hql.Ast.ANTLR.QuerySyntaxException' in NHibernate.dll。它没有锁就可以工作。我不想使用
<property name="connection.isolation">ReadUncommitted</property>
因为我必须只对特定的 table 应用 nolock。
下面是hql查询-
select d from Users d with (nolock) where d.Userid = 2
我错过了什么吗?
HQL 将不支持直接 with (nolock)
。但是我们可以使用原生的SQL查询。
因此,例如,而不是像这样(获取用户列表):
var hql = "select d from Users d with (nolock) where d.Userid = 2";
var query = session.CreateQuery(sql);
var result = query.List<User>();
我们需要使用原始 sql API
var sql = "select d.* from schema.UserTable d with (nolock) where d.user_id = 2 ";
var query = session.CreateSQLQuery(sql);
var result = query
.AddEntity(typeof(User))
.List<User>();
以防万一,我们知道通过 ID 只会返回一个用户。我们可以使用 UniqueResult<>
而不是 List
我有一个简单的休眠查询,在查询中使用了 nolock。我收到错误 - 发生识别错误并且休眠错误抛出异常:'NHibernate.Hql.Ast.ANTLR.QuerySyntaxException' in NHibernate.dll。它没有锁就可以工作。我不想使用
<property name="connection.isolation">ReadUncommitted</property>
因为我必须只对特定的 table 应用 nolock。
下面是hql查询-
select d from Users d with (nolock) where d.Userid = 2
我错过了什么吗?
HQL 将不支持直接 with (nolock)
。但是我们可以使用原生的SQL查询。
因此,例如,而不是像这样(获取用户列表):
var hql = "select d from Users d with (nolock) where d.Userid = 2";
var query = session.CreateQuery(sql);
var result = query.List<User>();
我们需要使用原始 sql API
var sql = "select d.* from schema.UserTable d with (nolock) where d.user_id = 2 ";
var query = session.CreateSQLQuery(sql);
var result = query
.AddEntity(typeof(User))
.List<User>();
以防万一,我们知道通过 ID 只会返回一个用户。我们可以使用 UniqueResult<>
而不是 List