我執行標記在一個特定的實體,SQL Server 2008的我現在已經是,簡化,這樣的結構在使用NHibernate:獲取SQL Server上使用HQL標籤和標籤數2008
public class Entity {
public Guid Id { get; set; }
}
public class Tag {
public Guid Id { get; set; }
public string Name { get; set; }
}
public class TagAssoc {
public Tag LinkedTag { get; set; }
public Entity LinkedEntity { get; set; }
//User
//Other properties
}
沒有什麼奇特的東西:一個實體可以使用相同的標籤多次標記,因爲該關聯還包括標記實體和其他內容的用戶數據。
現在,我正在嘗試獲取特定實體的標籤列表,以及標籤已應用了多少次的計數。事情是這樣的HQL:
select tass.LinkedTag, count(tass.LinkedTag)
from TagAssoc as tass left outer join tass.LinkedTag as t
group by tass.LinkedTag
這將生成以下SQL查詢:
select tag1_.Id as Id0_, tag1_.Name as Name0_, tag1_.Id as x0_0_, count_big(tag1_.Id) as x1_0_
from BandTags tagassoc0_ left outer join Tags tag1_ on tagassoc0_.TagId=tag1_.Id
group by tag1_.Id
這看起來是正確的,但不會在SQL Server 2008中工作,因爲不包括標籤的名稱屬性在「group by」子句中。爲了使它工作,我必須手動by子句爲了調整該集團包括標籤類的所有屬性:
select tass.LinkedTag, count(tass.LinkedTag)
from TagAssoc as tass left outer join tass.LinkedTag as t
group by tass.LinkedTag.Id, tass.LinkedTag.Name
但這取決於標籤類的屬性,因此必須更新一次課堂改變的時間。 有沒有其他方法可以使第一個HQL查詢工作?也許一些自動使「group by」屬性顯式的HQL語法?
感謝
我沒有想過通過反射來完成它。但現在我想我會堅持手動聲明每個屬性。 感謝您的回答。 :) – LorenzCK 2009-04-22 12:08:42