2013-07-11 6 views
0

У меня есть запрос SQL, как показано ниже:Как я могу генерировать NHibernate запрос с использованием критериев для следующего SQL запроса

SELECT * 
FROM USER R 
     INNER JOIN userdepartment C 
       ON R.id = C.userid 
     INNER JOIN userdepartment K 
       ON C.userid = K.userid 
WHERE C.departmentid = 155 
     AND K.departmentid = 157 

пользователя и Департамент имеют много-ко-многим и поддерживать отношения, у меня есть UserDepartment Таблица. Теперь я хочу получить только тех пользователей, у которых есть оба отдела с идентификаторами 155 и 177. Вышеупомянутый запрос делает то, что я хочу.

Теперь я хочу преобразовать вышеуказанный запрос в запрос Nhibernate. Я использую критерии для генерации запросов. Я пробовал следующее:

var criteria = Session.CreateCriteria<User>(); 
    var subcriteria = criteria 
         .CreateCriteria("UserDepartments","a", JoinType.InnerJoin); 
    subcriteria = subcriteria 
         .CreateCriteria("UserDepartments", "b", JoinType.InnerJoin); 
    var conjunction = Restrictions.Conjunction(); 
    conjunction.Add(Restrictions.Eq("DepartmentId", 155)); 
    conjunction.Add(Restrictions.Eq("DepartmentId", 177)); 
    subCriteria.Add(conjunction); 

Но это не работает. Пожалуйста, помогите мне с тем же. Заранее спасибо за вашу помощь.

+0

Вы должны определить отношение в своей конфигурации, а не пытаться воссоздать его в своем запросе –

+0

@PanagiotisKanavos Спасибо за ваш ответ. Я попытаюсь определить отношение –

ответ

0

Ваш запрос не работает, потому что в разделе пользователя в конфигурации не существует отношения userdepartment к userdepartment. вам необходимо создать дочерние элементы userdepartment в разделе пользователя. Затем вы можете получить доступ к этим детям. Это связано с тем, что nhibernate использует отношения, определенные в конфигурации для перемещения.

+0

Я попробую создать детей UserDepartment в UserDepartment. Спасибо за ваш ответ. –

+0

Я пытался, но напрасно. Может ли кто-нибудь помочь мне с тем же? –

+0

Просьба указать, как вы определили карту объекта userdepartment –

Смежные вопросы