使用内部联接条件语言

时间:2015-09-07 12:54:23

标签: hibernate-criteria

有两个表:评级和书籍。评级表具有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);

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

一些帮助?

1 个答案:

答案 0 :(得分:0)

criteria允许您检索特定类的列表,例如List<Book>。所以,你要求hibernate检索书籍清单,而不是书籍和评级列表。

当然,您可以在结果列表中访问每本书的评级。如果它不起作用,可能会发生LazyInitialitationException。在这种情况下,您将不得不应用OSIVF,延长会话生命周期等等。

Criteria允许您加入实体以过滤查询结果。如果您为评分创建别名,那是因为您希望使用评级属性过滤结果,但不会在结果列表中包含评分。