2010-08-03 3 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 

я Antlr исключение ниже

TestCase 'M: DataAccessLayer.HibernateDataProvider.GetContinentByName (System.String)' не удалось: Exception типа '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'"); 

Если это не исправить проблему, пожалуйста, отобразите отображение для континента.

0

O.K.

проблема заключается в «выборе» в начале. Кажется, это неверно в версии, которую я использую. Итак, как только я удалил «Выбрать» в начале, он работал нормально!

Смежные вопросы