HQL到CriteriaQuery转换

时间:2009-09-18 09:34:14

标签: nhibernate

类定义如下:

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

OpenID设置为natural-id,以便二级缓存识别出这一点。

我有这个HQL查询,它返回一个用户标签列表。

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

据我所知,HQL没有将OpenID标识为natural-id的语法,但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 :(得分:0)

db.CreateCriteria<User>()
  .SetProjection(Projections.Property("Tags"));
  .Add(Restrictions.Eq("OpenID", openId));
  .List<Tag>();

不确定这个NaturalId,从未使用它,我可能会添加一个正常的限制。