امتدادات Lambda Lambda - حريصة تحميل asscoscations
-
19-09-2019 - |
سؤال
لدي استعلام معايير لموقع الشبكات الاجتماعية. يحتوي كائن الشخص على مجموعة من الأصدقاء (أيضا كائنات شخص). الاستيقاظ يمسك الأول الأصدقاء الأولين، لكني أرغب أيضا في حمل كائن مرتبط في الصفحة الرئيسية ProfoProfileImage ثم كائن مرتبط لاحق MediumThumbnail.
يمكنني القيام بذلك في 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>();
}
المحلول
أعتقد أن ترتيب بياناتك يسبب الاستعلام لتوليد SQL غير المرغوب الذي تحصل عليه (وبالتالي لا توجد نتائج). هنا هو كيف ينبغي أن يكون:
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)
.Add<Person>(p => p.ID == person.ID)
.CreateCriteria(() => personAlias.MainProfileImage, JoinType.InnerJoin)
.CreateCriteria(() => personAlias.MainProfileImage.MediumThumbnail, JoinType.InnerJoin)
.AddOrder(() => personAlias.LatestLogin, Order.Desc)
.SetMaxResults(count);
return criteria.List<Person>();
}
علاوة على ذلك من خلال الوصف الخاص بك، ليس من الواضح من أي جمعية تريد الحصول على بيانات MainProfileImage و MediumThumbumbnail من. كما تستخدمه في بيان المعايير الخاصة بك، فأنت تطلب من البيانات أن تأتي من كائن الشخص الرئيسي الذي تحصل عليه أصدقائك كما كنت تستخدم friendsAlias
. وبعد لقد غيرت ذلك لاستخدام personAlias
بدلا من ذلك، أعتقد أن هذا هو المكان الذي تقصد فيه ربط البيانات من.