Pregunta Se obtuvo el error de NHibernate Excepción de tipo 'Antlr.Runtime.NoViableAltException'


Tengo algunos problemas con una consulta de una tabla que incluye un espacio en su nombre

Si escribo una consulta sql funciona bien, es decir, SELECT * FROM [grupos de productos], pero cuando se usa NHibernate CreateQuery, todo se rompe

using (ISession session = SessionFactory.OpenSession())
{
    IQuery query = session.CreateQuery("FROM [product groups]");
    IList<ProductGroups> results = query.List<ProductGroups>();
}

Generará el error

Se ha lanzado una excepción del tipo 'Antlr.Runtime.NoViableAltException'.   cerca de la línea 1, columna 5 en

NHibernate.Hql.Ast.ANTLR.ErrorCounter.ThrowQueryException () en      NHibernate.Hql.Ast.ANTLR.HqlParseEngine.Parse ()
     ...

Si uso un CreateSQLQuery funciona

ISQLQuery query = session.CreateSQLQuery("SELECT ID, Title, [Available as develop] FROM [product groups]").AddEntity(typeof(ProductGroups));
IList<ProductGroups> results = query.List<ProductGroups>();

El archivo de mapeo se ve así

<?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>

¿Por qué no funcionaría CreateQuery?


5
2018-06-29 21:50


origen


Respuestas:


los CreateQuery(), descrito aquí: 9.3.2. La interfaz IQuery, es la forma de consultar a tus Entidades con 14. HQL: El lenguaje de consulta de Hibernate.

Es decir. tienes que usar tu dominio nombres de modelos ProductGroups  en vez de mesa nombre [product groups]

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

6
2018-06-30 07:30