2010-08-03 61 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.

问题是在开始的'选择'。似乎它在我使用的版本中无效。 因此,一旦我在开始时删除了“选择”,它就可以正常工作!

相关问题