NHibernate: Как исключить класс, который является частью объединения, используя Criteria API - PullRequest
0 голосов
/ 25 января 2010

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

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

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

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

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

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

1 Ответ

2 голосов
/ 25 января 2010

Ваш вопрос не показывает классы, связанные с 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>();
...