【问题标题】:How to return only one record from database using Nhibernate + Criteria + Firebird?如何使用 Nhibernate + Criteria + Firebird 从数据库中只返回一条记录?
【发布时间】:2012-03-06 20:09:31
【问题描述】:

我正在使用 Nhibernate 3.2、Firebird Net Provider 2.7 和 Criteria。在谷歌搜索如何只返回数据库中的一条记录后,我来到了这个......

var criteria = session.CreateCriteria(typeof(T))
    .SetFirstResult(0)
    .SetMaxResults(1)
    .Add(getRestricao(rest))
    .UniqueResult<T>();

tx.Commit();

return criteria;

但不起作用!错误是:

NHibernate.Exceptions.GenericADOException : could not execute query
[ /* criteria query */ SELECT this_.idPermissao as idPermis1_21_0_, this_.nomePermissao as nomePerm2_21_0_, this_.permissao as permissao21_0_ FROM Permissao this_ WHERE this_.nomePermissao = ? ]
Name:cp0 - Value:Administrador
[SQL: /* criteria query */ SELECT this_.idPermissao as idPermis1_21_0_, this_.nomePermissao as nomePerm2_21_0_, this_.permissao as permissao21_0_ FROM Permissao this_ WHERE this_.nomePermissao = ?]
----> System.ArgumentException : index should be greater than or equal to 0
Parameter name: index

如何在 Criteria 中从 Firebird 生成“SELECT FIRST 1”?谢谢!

【问题讨论】:

    标签: nhibernate criteria firebird


    【解决方案1】:

    .UniqueResult 应该只返回 1 条记录,如果返回 0 条或多条记录,则会引发错误。

    如果您手动运行 SQL,您会得到多个记录吗?

    您是否尝试将.UniqueResult&lt;T&gt;() 更改为.List&lt;T&gt;()

    然后从您的方法调用中返回第一项。

    return criteria.FirstOrDefault();
    

    只要你保留你的最大记录,那么第一行应该只返回(或 null)

    【讨论】:

    • 如果记录为零则返回null,不抛出异常。如果我错了,请纠正我,但如果有多个结果,它不是只会抛出NonUniqueResultException 吗?请参阅:AbstractQueryImpl line 959
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 2023-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多