2013-06-29 15 views
5

Sto avendo alcuni problemi con una query di una tabella che include uno spazio nel suo nomeOttenere NHibernate errore eccezione di tipo 'Antlr.Runtime.NoViableAltException' stato gettato

Se scrivo uno sql-query funziona bene, cioè SELECT * FROM [gruppi di prodotti], ma quando si utilizza NHibernate createQuery tutto rompe

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

genererà l'errore

eccezione di tipo 'Antlr.Runtime.NoViableAltException' è stato gettato. vicino alla riga 1, colonna 5

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

Se uso un createSQLQuery funziona

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

Il file di mapping simile a questo

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

Perché non dovrebbe funzionare CreateQuery?

risposta

6

Il CreateQuery(), descritto qui: 9.3.2. The IQuery interface, è il modo in cui interrogare le entità con 14. HQL: The Hibernate Query Language.

I.e. è necessario utilizzare le vostre dominio nomi dei modelli ProductGroups al posto del tavolo nome [product groups]

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

Questo è perfettamente corretto, ho anche dovuto impostare il parametro tavolo nella classe nel file HBM, grazie. –