Почему Nhibernate не может создать этот простой запрос для меня? - PullRequest
1 голос
/ 03 августа 2010

Я не могу понять, почему этот простой запрос не создан.Я вызываю этот метод из теста, и он выдает исключение с жалобой на строку 1, столбец 7, где я не вижу ничего неправильного.

    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) ': исключение типа' Antlr.Runtime.NoViableAltException '.возле строки 1, столбец 7 NHibernate.Hql.Ast.ANTLR.QuerySyntaxException: было сгенерировано исключение типа 'Antlr.Runtime.NoViableAltException'.около строки 1, столбец 7

Есть предложения?

Спасибо

Ответы [ 3 ]

6 голосов
/ 03 августа 2010

session.CreateQuery выполняет запрос 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 голос
/ 03 августа 2010

Я думаю, что ожидается псевдоним, в котором вы указали полное имя сущности. Попробуйте:

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

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

0 голосов
/ 03 августа 2010

Годится

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

...