有两个表:评级和书籍。评级表具有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 :(得分:0)
criteria
允许您检索特定类的列表,例如List<Book>
。所以,你要求hibernate检索书籍清单,而不是书籍和评级列表。
当然,您可以在结果列表中访问每本书的评级。如果它不起作用,可能会发生LazyInitialitationException。在这种情况下,您将不得不应用OSIVF,延长会话生命周期等等。
Criteria允许您加入实体以过滤查询结果。如果您为评分创建别名,那是因为您希望使用评级属性过滤结果,但不会在结果列表中包含评分。