У меня есть объект с набором сумок, и я хочу просмотреть весь набор данных. В коллекции есть пункт order-by. Когда я пытаюсь загрузить коллекцию с нетерпением, NHibernate генерирует очень медленный SQL, поскольку он заставляет SQL Server выполнять сортировку по очень неуникальному свойству, а в таблице содержится большой объем данных.
код:
var session = NHibernateSessionManager.Instance.GetSession();
session.CreateCriteria<Album>()
.SetFetchMode("Track", FetchMode.Eager)
.SetMaxResults(1000)
.SetFirstResult(1)
.AddOrder(new Order("Id", true))
.List();
Отображение пакета (обратите внимание на атрибут order-by):
<bag name="Track" inverse="true" lazy="true" batch-size="1000" cascade="none"
order-by="TrackNumber ASC">
Соответствующий сгенерированный SQL:
OVER(ORDER BY track2_.TrackNumber, this_.Id) as __hibernate_sort_row
Если я удалю упорядочение из сопоставления, тогда SQL изменится на это (намного лучше):
OVER(ORDER BY this_.Id) as __hibernate_sort_row
Таким образом, вопрос заключается в следующем: есть ли способ переопределить или удалить отображенное предложение order-by?