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