Характеристики производительности между ICriteria и HQL меняются незначительно (я не знаю о QueryOver) по одной простой причине.
По умолчанию запросы ICriteria будут пытаться реализовать ваши стратегии выборки, как определено в вашем отображении, тогда какHQL по умолчанию рассматривает все как Lazy и зависит от ваших объявлений объединения в вашем запросе, чтобы определить, что извлекается или нет.
Кроме того, ICriteria зависит от отображения для передачи параметров, тогда как HQL допускает явные типы параметров, например IQuery.SetInt32 ("fooParam", 5);
Что действительно важно, так это подключаемость запросов ICriteria (см. ICriteria.CreateCriteria (). CreateCriteria () и т. д.), где механизм NH должен будет разрешить ICriteria и попытаться сгенерироватьНаиболее допустимый SQL.
С другой стороны, вероятно, легче предсказать, будет ли запрос HQL давать согласованные результаты и, как таковой, упростит использование QueryCache.
В любом случае конфигурация генерируется один раз сИСЭОпределения создания и отображения sionFactory и что-то еще находятся в памяти, поэтому производительность хорошая.
Фактическая генерация SQL выполняется по-разному между этими двумя, и именно поэтому утилита для ICriteria -> HQL не делаетсуществует.
В конце концов, мой опыт показал мне, что производительность между 2, вероятно, одинакова, дает или принимает несколько миллисекунд.
Как примечание, объявляя как можно больше вотображение приведет к более сжатой генерации sql, а также к операции NHibernate, например, для сопоставления свойств строки Length
в .hbm.xml приведет к проверке длины строки NHibernate перед переходом в базу данных.