7

我在查询名称中包含空格的表时遇到了一些问题

如果我写一个 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() 在 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 不起作用?

4

1 回答 1

9

CreateQuery()在此处描述:9.3.2。IQuery 接口,是如何使用14.HQL:Hibernate 查询语言查询您的实体的方式。

即你必须使用你的模型名ProductGroups 而不是[product groups]

//IQuery query = session.CreateQuery("FROM [product groups]");
IQuery query = session.CreateQuery("FROM ListModels.ProductGroups as pg");
于 2013-06-30T07:30:14.000 回答