2015-09-07 63 views
0

有两个表格:评分和书籍。评级表具有Books表的外键。使用内部连接标准语言

这些表映射是这样的:

书籍:

HasMany(x => x.RatingList).Cascade.All().Inverse();  

和评分表:

References(x => x.Books).Column("BookId").Cascade.All(); 

这样:

var bks = session.CreateCriteria("Books", "b"); 

使用此限制用于选择书籍

bks.Add(Restrictions.Eq("CategoryId",id)); 

这里是问题,如何加入评分表?

    bks.CreateAlias("b.Rating", "c"); 
        bks.List(); 

        return PartialView("/Views/Home/_Books.cshtml", bks); 

我需要的最终结果是选择所有的书籍,但也为他们评分。在评分表中有一本书有很多评分。图书评级应该以评分的平均值给出。

有帮助吗?

回答

0

A criteria让我们检索一个特定类的列表,在你的情况List<Book>。所以,你要求hibernate检索一个书目列表,而不是书籍和评分列表。

当然,您可以将每本书的收视率存取到结果列表中。如果它不起作用,可能会发生LazyInitialitationException。在这种情况下,你将不得不申请OSIVF,延长会话寿命,或者其他任何事情。

Criteria允许您连接实体以过滤查询结果。如果您为评分创建别名,那是因为您想要使用评分属性过滤结果,但不会将评分包含在结果列表中。