2013-06-29 17 views
5

Mam pewne problemy z kwerendy tabeli, która zawiera przestrzeń w jego imieniuPierwsze NHibernate błędu wyjątek typu „Antlr.Runtime.NoViableAltException” został rzucony

Jeśli mogę napisać zapytanie SQL to działa? grzywny, tj SELECT * FROM [grupy produktów], ale podczas używania NHibernate CreateQuery wszystko łamie

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

będzie generować błędu

wyjątek typu 'Antlr.Runtime.NoViableAltException' został rzucony. pobliżu wiersz 1, kolumna 5 w

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

Jeśli używam CreateSQLQuery działa

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

plik mapowania wygląda następująco

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

Dlaczego funkcja CreateQuery nie działa?

Odpowiedz

6

Opisany tutaj CreateQuery(): 9.3.2. The IQuery interface, jest sposobem, w jaki sposób zapytać swoje jednostki za pomocą 14. HQL: The Hibernate Query Language.

tj. trzeba użyć domeny nazwy modeli ProductGroups zamiast tabeli nazwy [product groups]

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

Jest to całkowicie poprawna, miałem również ustawić parametr tabeli w klasie w pliku HBM, dzięki. –

Powiązane problemy