获取NHibernate错误类型为';的异常;Antlr.Runtime.NoViableAltException

本文关键字:异常 Runtime NoViableAltException Antlr 错误 NHibernate 类型 获取 | 更新日期: 2023-09-27 18:20:20

我在查询一个名为的表时遇到了一些问题

如果我写一个sql查询,它可以很好地工作,即SELECT*FROM[产品组],但当使用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.SthrowQueryException()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不起作用?

获取NHibernate错误类型为';的异常;Antlr.Runtime.NoViableAltException

此处描述的CreateQuery():9.3.2。IQuery接口是如何用14查询实体的方法。HQL:休眠查询语言。

即,您必须使用模型名称ProductGroups,而不是名称[product groups]

//IQuery query = session.CreateQuery("FROM [product groups]");
IQuery query = session.CreateQuery("FROM ListModels.ProductGroups as pg");