2010-01-25 6 views
0

Я все еще новичок в Hibernate и пытаюсь использовать его для веб-сайта, который унаследовал. К сожалению, это означает, что иногда схемы db не всегда имеют смысл.NHibernate: Как исключить класс, который является частью соединения с использованием API критериев.

С учетом сказанного, я пытаюсь построить следующий HQL запрос с использованием критериев API

from TableB b where b.id = :id and b.TableAProperty.UserId = :userId 

вышеприведенное утверждение HQL генерировать SQL, который будет выбирать и возвращать TableB только что то, что я хочу, чтобы это произошло. Однако, используя приведенные ниже инструкции Critera API, сгенерированный оператор SQL выбирает поля для TableB и TableA.

DataProvider.Session 
    .CreateCriteria<TableB>() 
    .Add(Expression.Eq("Id", id)) 
    .CreateCriteria("TableA") 
    .Add(Expression.Eq("UserId", userId)) 
    .UniqueResult<TableB>() 
    ; 

В идеальном мире я мог бы обновить схемы db, чтобы иметь больше смысла, но, увы, я не могу. Любая помощь по этому вопросу будет принята с благодарностью.

ответ

2

В вашем вопросе не отображаются классы, связанные с TableA и TableB, поэтому я предполагаю, что классы TableA и TableB и что TableB имеет свойство TableA.

DataProvider.Session 
    .CreateCriteria<TableB>() 
    .Add(Expression.Eq("Id", id)) 
    .CreateAlias("TableA", "a") 
    .Add(Expression.Eq("a.UserId", userId)) 
    .UniqueResult<TableB>(); 
+0

Ваше предположение верно. – rmblstrp