Использование элемента nhibernate <loader>с запросами HQL - PullRequest
5 голосов
/ 26 марта 2010

Я пытаюсь использовать HQL-запрос в элементе <loader> для загрузки объекта, основанного на других объектах.

Мой класс выглядит следующим образом

public class ParentOnly
{
    public ParentOnly(){}
    public virtual int Id { get; set; }
    public virtual string ParentObjectName { get; set; }
}

и отображение выглядит так

<class name="ParentOnly">
  <id name="Id">
    <generator class="identity" />
  </id>
  <property name="ParentObjectName" />
  <loader query-ref="parentonly"/>
</class>

<query name="parentonly" >
  select new ParentOnly() 
  from SimpleParentObject as spo
  where spo.Id = :id
</query>

Класс, который я пытаюсь отобразить поверх, - это SimpleParentObject, который имеет собственное отображение и может быть загружен и сохранен без проблем.

Когда я вызываю session.Get <ParentOnly> (id), sql корректно работает с таблицей SimpleParentObject, и создается экземпляр объекта ParentOnly (как я могу пройти через конструктор), но возвращается только нуль, а не экземпляр объекта ParentOnly.

Я могу сделать это успешно, используя вместо HQL, но я пытаюсь построить это независимо от базы данных.

Есть мысли о том, как получить элементы <loader> и <query> для возврата заполненного объекта ParentOnly ...?

Спасибо

Мэтт

1 Ответ

0 голосов
/ 28 августа 2012

Исходя из моего понимания документации nHibernate, изменение оператора select должно решить эту проблему.

<query name="parentonly" >
  select ParentObjectNameAS {spo.Name}, Id AS {spo.Id}
  from SimpleParentObject as spo
  where spo.Id = :id
</query>

source: http://www.nhforge.org/doc/nh/en/

...