Nhibernate HQL到CriteriaQuery的转换

Nhibernate HQL到CriteriaQuery的转换,nhibernate,Nhibernate,类的定义如下: class User { public int ID { get; set; } public string OpenID { get; set; } public IList<Tag> Tags { get; set; } } 类用户{ 公共int ID{get;set;} 公共字符串OpenID{get;set;} 公共IList标记{get;set;} } OpenID被设置为自然id,因此二级缓存可以识别这一点 我有一个HQL

类的定义如下:

class User {
     public int ID { get; set; }
     public string OpenID { get; set; }
     public IList<Tag> Tags { get; set; }
}
类用户{
公共int ID{get;set;}
公共字符串OpenID{get;set;}
公共IList标记{get;set;}
}
OpenID被设置为自然id,因此二级缓存可以识别这一点

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

db.CreateQuery("select Tags from User where OpenID = :openId")
  .SetString("openId", openId)
  .List<Tag>();
db.CreateQuery(“从用户中选择标记,其中OpenID=:OpenID”)
.SetString(“openId”,openId)
.List();
据我所知,HQL没有将OpenID标识为自然id的语法,但CriteriaQuery有这种语法(Restrictions.naturaid()…)

所以我需要将这个查询转换为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>();
db.CreateCriteria()
.Add(Restrictions.naturaid().Set(“OpenID”,OpenID))
//我需要告诉criteria查询我想在这里返回Tags属性-我不知道怎么做
.List();
db.CreateCriteria()
.SetProjection(Projections.Property(“标记”));
.Add(Restrictions.Eq(“OpenID”,OpenID));
.List();

不确定这个自然的,从来没有使用过,我可能只会添加一个正常的限制。

这似乎是很合理的,它会工作,但它没有。它返回一个包含一个项的列表,该项为空。执行的查询是这样的:从[USER]this_u中选择this_u.ID作为y0_u,其中this_u.OPENID=@p0;标记映射如下:如果您对NaturalId()感兴趣,请阅读以下内容:
db.CreateCriteria<User>()
  .SetProjection(Projections.Property("Tags"));
  .Add(Restrictions.Eq("OpenID", openId));
  .List<Tag>();