2009-06-06 92 views
1

我正试图获得在NHibernate中工作的标签云架构。Nhibernate标签云

public class Tag : Entity 
{ 
    public virtual int Id { get; set; } 
    public virtual string Text { get; set; } 
} 

此表将映射到我的模式中的一些实体,因此我不想为每个关联的标记类添加一个集合。

但我想要查询标记实体并在所有连接的表中返回count(*)。我可以在SQL中轻松完成这项工作,但我还没有看到NH的光芒。

开始写一些HQL。

select t.Text, count(t.Id) 
from Tag t join ???? 
where t.Id= :tagid 
    group by t.Text 

我该加入什么?因为在对象模型中,多对多桥表没有类和没有属性,这是否意味着这是行不通的?

你会建议什么?我有兴趣看看这是否可以在标准中完成。

非常感谢,

伊恩

+0

只是想知道 - 标签是一个实体吗?它不是一个真正的价值对象吗?我的意思大概是两个标签完全相同的名称,但不同的ID将是毫无意义的。 – UpTheCreek 2011-04-01 10:23:40

回答

1

这个怎么样,与使用标准一开始,我还没有运行它,我不知道该怎么办的加入...

IList multiResults = s.CreateMultiCriteria() 
    .Add(s.CreateCriteria(typeof(Tag)).SetProjection(Projections.RowCount())) 
    .List(); 
+2

当sql非常简单时,它非常令人沮丧。例如,如果我有标签和实体加入entity_tag表。所有我需要的标签计数是 选择t.Text,COUNT(*) 从标签T 加入Entity_Tags等 上et.TagId = t.Id 集团通过t.text 我不知道我可以从NH中获得如此简洁的内容。我真的不想用集合来污染我的标记模型类,只是为了让NH起作用。 – madcapnmckay 2009-06-07 11:59:25