具有公式属性的实体上的CreateSqlQuery

时间:2010-06-21 12:39:44

标签: nhibernate

当我尝试使用CreateSqlQuery查询表并将其转换为包含公式属性的实体时,我得到以下Adoexception。

“值不能为空。 参数名称:fieldName“

首先,是否可以在具有公式映射的实体上使用createsqlquery?

2 个答案:

答案 0 :(得分:7)

可以将CreateSQLQuery与公式一起使用。

这是一个概念证明。映射(类不难猜):

<class name="Foo">
  <id name="Id">
    <generator class="hilo"/>
  </id>
  <property name="Data"/>
  <property name="DataX2" formula="Data * 2"/>
</class>

这是一个查询:

var foos = session.CreateSQLQuery(
                   @"
                   select Id          as {foo.Id},
                          Data        as {foo.Data},
                          Data + Data as {foo.Data2}
                   from   Foo
                   ")
                  .AddEntity("foo", typeof(Foo))
                  .List<Foo>();

如果你仔细观察,你会发现我使用的是与映射中声明的公式不同的公式。只要查询中包含所有属性,NHibernate就允许任何内容。

我建议您阅读17.1.2. Entity queries以及以下几点。

答案 1 :(得分:1)

经过多次搜索,我发现了以下内容

https://issues.jboss.org/browse/JBPAPP-6571

似乎这是hibernate中的一个真正的错误,他们决定不修复。有一些解决方法。我认为最好的方法是使用别名作为属性名称。必须使用别名,如下所示:

http://nhibernate.info/doc/nh/en/index.html#querysql-aliasreferences