当我尝试使用CreateSqlQuery查询表并将其转换为包含公式属性的实体时,我得到以下Adoexception。
“值不能为空。 参数名称:fieldName“
首先,是否可以在具有公式映射的实体上使用createsqlquery?
答案 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