2013-06-29 2 views
5

Je vais avoir quelques problèmes avec une requête d'une table qui comprend un espace dans son nomerreur NHibernate Exception de type « Antlr.Runtime.NoViableAltException » a été jeté

Si j'écris une requête SQL il fonctionne très bien, par exemple SELECT * FROM [groupes de produits], mais lorsque vous utilisez tout NHibernate CreateQuery casse

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

génère l'erreur

Exception de type 'Antlr.Runtime.NoViableAltException' a été lancé. près de la ligne 1, colonne 5 à

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

Si j'utilise un createSQLQuery cela fonctionne

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

Le fichier de mappage ressemble à ceci

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

Pourquoi CreateQuery ne fonctionnerait-il pas?

Répondre

6

Le CreateQuery(), décrit ici: 9.3.2. The IQuery interface, est la façon dont interroger vos entités avec 14. HQL: The Hibernate Query Language.

I.e. vous devez utiliser vos noms de modèle domaineProductGroups au lieu de la table nom [product groups]

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

Ceci est parfaitement correct, je devais aussi régler le paramètre de table dans la classe dans le fichier HBM, merci. –

Questions connexes