2013-06-29 38 views
5

Tôi đang gặp một số vấn đề với một truy vấn của một bảng bao gồm một không gian trong tên của nóBắt NHibernate lỗi ngoại lệ của loại 'Antlr.Runtime.NoViableAltException' đã được ném

Nếu tôi viết một sql truy vấn nó hoạt động tốt, tức là SELECT * FROM [nhóm sản phẩm], nhưng khi sử dụng NHibernate CreateQuery phá vỡ mọi thứ

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

sẽ tạo ra lỗi

ngoại lệ của loại 'Antlr.Runtime.NoViableAltException' đã được ném. dòng gần 1, cột 5 tại

NHibernate.Hql.Ast.ANTLR.ErrorCounter.ThrowQueryException() tại NHibernate.Hql.Ast.ANTLR.HqlParseEngine.Parse()
...

Nếu tôi sử dụng một CreateSQLQuery nó hoạt động

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

Các tập tin bản đồ trông như thế này

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

Tại sao CreateQuery không hoạt động?

Trả lời

6

CreateQuery(), được mô tả tại đây: 9.3.2. The IQuery interface, là cách truy vấn đối tượng của bạn với 14. HQL: The Hibernate Query Language.

I.e. bạn phải sử dụng miền tên mô hình của bạn ProductGroups thay vì bảng tên [product groups]

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

này là hoàn toàn đúng, tôi cũng đã phải thiết lập các thông số bảng trong lớp trong file hbm, cảm ơn. –