我正在尝试从HQL调用数据库函数。 HQL语句应该只调用函数并返回其值,如此
select someFunction(:someParameter)
如果我尝试拨打选择current_timestamp()
。
失败了
NHibernate.Hql.Ast.ANTLR.QuerySyntaxException:抛出了类型为“Antlr.Runtime.MismatchedTreeNodeException”的异常。靠近第1行第24列[select current_timestamp()]
我知道检索当前时间戳的理由不多。但我已经创建了一些用户定义的数据库函数,我想通过从HQL调用它们进行单元测试。
在我看来,如果没有FROM和WHERE子句,就不可能编写HQL语句。这可能是真的吗?
IQuery query = unitOfWork.Session.CreateQuery("select current_timestamp()");
var ts = query.UniqueResult();
答案 0 :(得分:2)
如果您明确地将其设置为SQL查询而不是HQL查询,则可以使用此方法:
var query = unitOfWork.Session.CreateSQLQuery("select current_timestamp()");
答案 1 :(得分:0)
调用这样的函数没有多大意义。您有一个应该使用其他方法调用的存储过程,或者您有一个与DB无关的函数,因此不应该从数据库开始运行。
在任何情况下,如果函数对一组行不起作用,你不能只添加一些虚拟FROM子句,例如在一个小的静态表上吗?