سؤال

وتحاول أن تفعل شيئا أكثر استعلام معقد، ويعتقد أن HQL سيكون من الأفضل لهذا المنصب. باستخدام nHibernate.

SELECT * FROM [Group] g 
  INNER JOIN [User2Group] ug on g.Id = ug.GroupId
  INNER JOIN [User] u ON u.Id = ug.UserId
  INNER JOIN Activity a on g.ActivityId = a.Id
WHERE u.Id = ? AND a.Lineage LIKE '?%'

واعتقد انني يمكن أيضا أن مجرد استخدام SQL وكذلك (؟)، ولكن لست متأكدا حقا كيف لتحميل الأشياء بلدي بهذه الطريقة.

هل كانت مفيدة؟

المحلول

والامر يتوقف على ما الكيانات الخاصة بك، وما هي الهدف الرئيسي الذي يهمك هو. يبدو أنك سحب كل منهم بدلا من كيان واحد فقط. وانا ذاهب الى تولي المجموعة هي كيان من هذا المثال

from MyApp.Entities.Group as g
join fetch g.Users as u
join fetch g.Activity as a
where u.Id = :userId and a.Lineage like '?%'

وهذا يجب ان تحصل على انك بدأته. ولكن مع من معرفة الهيكل الخاص، وأنا أخذ طلقة في الظلام.

نصائح أخرى

إذا كان لديك كثير لكثير من الاتصال (الجدول User2Group) يجب أن تبدأ منه وجعل كل ينضم في هذا الجدول. إذا كان لديك تعيينات الصحيح، والاستعلام أدناه العمل وكأنه سحر.

from User2Group as ug
join ug.User as u
join ug.Group as g
where u.Id = :userId and g.Activity.Lineage like '?%'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top