1
类被定义为这样的:HQL到CriteriaQuery中转换
class User {
public int ID { get; set; }
public string OpenID { get; set; }
public IList<Tag> Tags { get; set; }
}
的OpenID被设定为天然-ID,以使得第二级高速缓存识别此。
我有这个HQL查询返回用户标签列表。
db.CreateQuery("select Tags from User where OpenID = :openId")
.SetString("openId", openId)
.List<Tag>();
据我所知HQL没有语法识别OpenID的自然-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>();
这似乎是合乎逻辑的,这将工作,但事实并非如此。 它返回一个项目列表,该项目为空。 执行的查询是这样的: SELECT this_.ID作为y0_ FROM [USER] THIS_ WHERE this_.OPENID = @ P0; 映射的标签是这样的: <袋名称= “标记” 表= “USER_TAG”> <高速缓存利用率= “非严格读写”/> <列名= “ID_USER”/> <许多一对多类= “BeriMe.Biz.Domain.Tag”> <列名= “ID_TAG”/> 许多一对多> –
dmonlord
2009-09-18 10:23:51
如果你有兴趣NaturalId ()你应该阅读这个:http://ayende.com/Blog/archive/2009/06/23/nhibernate-ltnatural-idgt.aspx – dmonlord 2009-09-18 10:26:00