2015-09-07 72 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允許您連接實體以過濾查詢結果。如果您爲評分創建別名,那是因爲您想要使用評分屬性過濾結果,但不會將評分包含在結果列表中。