2010-08-03 60 views
1

我不明白爲什麼這個簡單的查詢沒有創建。我從一個測試中調用這個方法,它會拋出一個異常,抱怨第1行第7列,在那裏我看不到任何錯誤。爲什麼Nhibernate無法爲我創建這個簡單的查詢?

public IList<Continent> GetContinentByName(string name) 
     { 
     ISession session = GetSession(); 

     IQuery query = 
         session.CreateQuery("select from Continent where Continent.ContinentShort='Atlantis'"); 

// (........) Next step will be getting the list from the query if I can make it work 

我得到以下

的TestCase ANTLR異常 'M:DataAccessLayer.HibernateDataProvider.GetContinentByName(System.String)' 失敗:類型Antlr.Runtime.NoViableAltException「引發的異常。靠近第1行第7列 NHibernate.Hql.Ast.ANTLR.QuerySyntaxException:拋出了類型爲'Antlr.Runtime.NoViableAltException'的異常。靠近第1行第7列

有什麼建議嗎?

感謝

回答

6

session.CreateQuery expexts一個HQL查詢,例如: sess.CreateQuery("from DomesticCat cat where cat.Name in (:namesList)");

如果你正在試圖推動原生SQL查詢,你必須這樣做: session.CreateSQLQuery("SELECT {cat.*} FROM CAT {cat} WHERE ROWNUM<10", "cat", typeof(Cat))

然而,不會是使用NHibernate的好方法。

見NHibernate的文檔的更多信息:http://nhibernate.info/doc/nh/en/index.html#manipulatingdata-querying

1

我認爲這是希望,你必須提供完整的實體名稱的別名。請嘗試:

IQuery query = session.CreateQuery("from Continent c where c.ContinentShort='Atlantis'"); 

如果這不能解決問題,請顯示Continent的映射。

0

O.K.

問題是在開始的'選擇'。似乎它在我使用的版本中無效。 因此,一旦我在開始時刪除了「選擇」,它就可以正常工作!

相關問題