我在查询包含名称空间
的表时遇到了一些问题如果我编写一个sql-query它工作正常,即SELECT * FROM [product groups],但是当使用NHibernate CreateQuery时,一切都会中断
using (ISession session = SessionFactory.OpenSession())
{
IQuery query = session.CreateQuery("FROM [product groups]");
IList<ProductGroups> results = query.List<ProductGroups>();
}
会生成错误
抛出了类型'Antlr.Runtime.NoViableAltException'的异常。
附近的第1行第5列NHibernate.Hql.Ast.ANTLR.ErrorCounter.ThrowQueryException()at NHibernate.Hql.Ast.ANTLR.HqlParseEngine.Parse()
...
如果我使用CreateSQLQuery它可以工作
ISQLQuery query = session.CreateSQLQuery("SELECT ID, Title, [Available as develop] FROM [product groups]").AddEntity(typeof(ProductGroups));
IList<ProductGroups> results = query.List<ProductGroups>();
映射文件如下所示
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true">
<class name="ListModels.ProductGroups, ListModels" lazy="true" table="Product groups">
<id name="ID">
<generator class="native" />
</id>
<property name="Title" />
<property name="AvailableAsDevelopmentLicense" column="Available as develop" />
</class>
</hibernate-mapping>
为什么CreateQuery不起作用?
答案 0 :(得分:7)
此处描述的CreateQuery()
:9.3.2. The IQuery interface是如何使用14. HQL: The Hibernate Query Language查询您的实体的方式。
即。您必须使用域模型名称ProductGroups
而不是表名称[product groups]
//IQuery query = session.CreateQuery("FROM [product groups]");
IQuery query = session.CreateQuery("FROM ListModels.ProductGroups as pg");