Nhibernate - исключая некоторые простые HQL - PullRequest
0 голосов
/ 16 апреля 2010

У меня есть карты сущностей в .hmb.xml и определен атрибут для всех сущностей в классах.

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

public List<DevelopmentStep> getDevelopmentSteps()
   {
       List<DevelopmentStep> developmentStep;
       developmentStep = Repository.FindAll<DevelopmentStep>(new OrderBy("Id", Order.Asc));
       return developmentStep;
   } 

У меня есть проверка из сети, что мы можем написать HQL, теперь проблема заключается в том, как выполнить этот HQL как ..

string hql = "From DevelopmentSteps d inner join table2 t2 d.id=t2.Id where d.id=IDValue";

Какие дополнительные классы или другие вещи мне нужно добавить для выполнения этого вида HQL?

Пожалуйста, помогите мне ---- Спасибо

1 Ответ

1 голос
/ 16 апреля 2010
  • Для написания динамических запросов я рекомендую использовать Criteria API. Это динамично, потому что у вас есть один запрос для нескольких разных типов, и вы также хотите установить порядок динамически.
  • Запросы всегда объектно-ориентированные. Вам не нужно присоединяться с помощью внешних ключей, вы просто перемещаетесь по модели класса. В запросах также нет «таблиц», кроме сущностей.
  • Получение (единичных) экземпляров по идентификатору всегда должно выполняться с использованием session.Get (или session.Load). Только тогда NHibernate может также взять его прямо из кэша без обращения к базе данных, если он уже был загружен.

например:

public IList<T> GetAll<T>(string orderBy)
{
    return session.CreateCriteria(typeof(T))
      .AddOrder(Order.Asc(orderBy))
      .List<T>();
}
...