NHibernate CreateSqlQuery и addEntity - PullRequest
       1

NHibernate CreateSqlQuery и addEntity

1 голос
/ 30 июля 2010

Руководство по гибернации говорит следующее:

String sql = "SELECT ID as {c.id}, NAME as {c.name}," +

   "BIRTHDATE as {c.birthDate}, MOTHER_ID as {c.mother}, {mother.*} " +

  "FROM CAT_LOG c, CAT_LOG m WHERE {c.mother} = c.ID";

Список loggedCats = sess.createSQLQuery (sql)

  .addEntity("cat", Cat.class)

  .addEntity("mother", Cat.class).list()

Теперь то, что у меня есть, в основном то же самое.Я возвращаю два одинаковых типа в строке.Я делаю что-то вроде этого:

SELECT {ctrl1.*}, {ctrl2.*} FROM tableA AS A
                                                LEFT JOIN tableB AS ctrl1 ON (A.controlID = ctrl1.controlID AND ctrl1.controlOptionType = ? AND ctrl1.controlOptionValue = ?)
                                                LEFT JOIN tableB AS ctrl2 ON (A.controlID = ctrl2.controlID AND ctrl2.controlOptionType = ? AND ctrl2.controlOptionValue = ?)

А потом я addEntity("ctrl1", typeof(mycontrolclass) и addEntity("ctrl1", typeof(mycontrolclass)

, что мне кажется точно таким же, как их пример.Но я получаю это исключение: «Не удалось выполнить запрос», а внутреннее исключение - «Не удалось найти указанный столбец в результатах».Если я скопирую sql в исключении (к которому он добавил «AS ctrl1_1_3_3_» и т. Д.), Он будет работать нормально.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 23 декабря 2010

Я имел дело с вашей проблемой только для изучения, потому что вы наверняка будете тем временем нашли решение, но проблема не должна лежать в запрос (который в порядке), но в некотором несоответствии сопоставления или где-то еще (возможно, база данных).

0 голосов
/ 30 июля 2010

Что именно вы пытаетесь сделать?Я полагаю, что вам может не понадобиться использовать любой из них.

// Using HQL:
var motherId = 25;
var hql = "select c.birthDate, c.mother from Cat c where c.mother.Id = :motherId";
var result = Session.CreateQuery(hql)
                    .SetParameter("motherId", motherId)
                    .ToList();

// Using NHibernate.LINQ:
var result = (from cat in Session.Linq<Cat>()
             where cat.Mother.Id == motherId
             select new { cat.birthDate, cat.mother }).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...