Преобразование HQL в CriteriaQuery - PullRequest
1 голос
/ 18 сентября 2009

Класс определяется следующим образом:

class User {
     public int ID { get; set; }
     public string OpenID { get; set; }
     public IList<Tag> Tags { get; set; }
}

OpenID установлен как натуральный идентификатор, так что кэш второго уровня распознает это.

У меня есть этот HQL-запрос, который возвращает список пользовательских тегов.

db.CreateQuery("select Tags from User where OpenID = :openId")
  .SetString("openId", openId)
  .List<Tag>();

Насколько я знаю, HQL не имеет синтаксиса для идентификации OpenID как натурального-идентификатора, но CriteriaQuery имеет это (Restrictions.NaturalId () ...)

Так что мне нужно преобразовать этот запрос в CriteriaQuery. Что-то в этом направлении:

db.CreateCriteria<User>()
  .Add(Restrictions.NaturalId().Set("OpenID", openId))
  //I need to tell criteria query that I want to return Tags property here - I don't know how to do that
  .List<Tag>();

1 Ответ

0 голосов
/ 18 сентября 2009
db.CreateCriteria<User>()
  .SetProjection(Projections.Property("Tags"));
  .Add(Restrictions.Eq("OpenID", openId));
  .List<Tag>();

Не уверен насчет NaturalId, никогда не использовал его, я бы просто добавил обычное ограничение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...