У меня есть запрос Criteria Query для сайта социальной сети. Объект Person имеет коллекцию друзей (также объектов человека). Запрос захватывает первых друзей N, но я также хочу, чтобы он загружал связанный объект MainProfileImage, а затем последующий связанный объект MediumThumbnail.NHibernate Lambda Extensions - Eager Загрузка комплектов коллекции
я могу сделать это в HQL легко:
select friends from Person person inner join person.Friends friends inner join fetch friends.MainProfileImage image inner join fetch image.MediumThumbnail where person = :person1 order by friends.LatestLogin desc
Вот мои критерии усилий. По какой-то причине это ничего не возвращает!
public static IList<Person> GetFriends(Person person, int count)
{
Person personAlias = null;
Person friendAlias = null;
ICriteria criteria = NHibernateSessionManager.Instance.GetSession()
.CreateCriteria(typeof (Person),() => personAlias)
.CreateCriteria(() => personAlias.Friends,() => friendAlias, JoinType.LeftOuterJoin)
.CreateCriteria(() => friendAlias.MainProfileImage, JoinType.InnerJoin)
.CreateCriteria(() => friendAlias.MainProfileImage.MediumThumbnail, JoinType.InnerJoin)
.AddOrder(() => personAlias.LatestLogin, Order.Desc)
.Add<Person>(p => p.ID == person.ID)
.SetMaxResults(count);
return criteria.List<Person>();
}
Почему бы вам просто не оставить HQL на месте? –