NHibernate diction中的SQL查询

时间:2010-05-27 13:58:20

标签: sql nhibernate

我有一个在SQL Management Studio中运行的SQL查询:

选择ID 从表t 其中t.Date =   (选择最大(日期)    来自(       选择 *       从ReferenceId = xy)u)的表格

原因是,从具有某个外键的所有条目中,我想要收到一个 最高的日期。

我试图改进这个查询以便在NHibernate中使用,我得到了

IQuery query = session.CreateQuery(String.Format(
            @"Select t.Id  
            From table t
            Where t.Date =
                (Select Max(Date)
                From (Select * 
                      From table t where t.ReferenceItem.Id = " + item.ReferenceItem.Id + ")u)"));

我收到错误消息:“预期”

如何构建NHibernate查询? “In”是什么意思?

4 个答案:

答案 0 :(得分:3)

要执行 SQL 查询,您必须使用CreateSQLQuery代替CreateQuery

后者创建 HQL 查询。

答案 1 :(得分:1)

“in expected”意味着映射和查询尝试运行不匹配。

HQL查询会在映射到您的类时使用令牌。因此,它们的SQL功能非常有限:它们只允许所选Dialect允许的内容。

答案 2 :(得分:1)

您应该验证您的映射文件属性,看看您是否正在使用嵌入式资源,否则,您将继续收到此错误

答案 3 :(得分:0)

好的,我可以正确构建查询,它应该是

"Select t.Id  
            From table t
            Where t.Date =
                (Select Max(u.Date)
                From table u where u.ReferenceItem.Id = " + item.ReferenceItem.Id + ")"