我正在尝试通过 HQL 中的存储过程获取当前时间戳。这意味着我的代码如下所示:
var currentTimestamp =
session.CreateQuery("SELECT CURRENT_TIMESTAMP()")
.UniqueResult<DateTime>();
这行不通。具体来说,它System.NullReferenceException
深入研究了 NHibernate HqlParser.cs 文件。我对此进行了一些尝试,并改为使用以下方法:
var currentTimestamp =
session.CreateQuery("SELECT CURRENT_TIMESTAMP() FROM Contact")
.SetMaxResults(1)
.UniqueResult<DateTime>();
现在我有了我想要的数据,但我没有 HQL 查询。我希望查询代表我要问的问题——就像我的原始格式一样。
这里有一个明显的问题是“你为什么使用 HQL?” 我知道我可以很容易地做到这一点session.CreateSQLQuery(...)
,直接访问我们的 MySQL 5.1 数据库。这只是我的核心问题的一个示例,根本原因是我在整个代码库中使用自定义无参数 HQL 函数,并且我希望进行集成测试,以尽可能隔离地运行这些 HQL 无参数函数可能的。
我的 hack 还包含一些严肃的假设。它不会返回结果,例如,如果 Contact 表中没有记录,或者 Contact 表不再存在。