2010-03-31 76 views
0

我有兩個模型,它們有一對多的關係。讓我們說它是一個產品的拍賣,產品可以有很多出價。按Hibernate中關係的數量排序

基本上我想要做的是拉出所有的產品,但按他們收到的出價數量排序。

到目前爲止,我已經得到了什麼是:

"select p from Product as p join p.bids b where b.product=p order by COUNT(b) ASC"; 

不過,這似乎只是拉出來一個產品,它的出價。如果我想要一個Hibernate查詢期間訂購我通常可以這樣做

"select p from Product as p ORDER BY p.name"; 

我想我可能只是做沿着

"select p from Product as p ORDER BY COUNT(p.bids)"; 

行的東西,但是我不能。

有沒有人有這樣的問題的任何意見或經驗?

感謝, -gearoid

回答

0

你可以把你的產品叫numberOfBids的屬性,然後映射像這樣

<property name="numberOfBids"> 
    <formula> 
     (SELECT (count(bids.id) WHERE bids.product_id = product_id))) 
    </formula> 
</property> 

現在用這種方法唯一的問題是公式中的查詢標籤必須是直接的SQL。所以它是數據庫特定的。在此查詢中,出價是數據庫中出價表的標誌,而product_id是產品中包含產品ID的字段的名稱。此外,您還必須爲您的產品數據對象添加long類型的屬性。

一旦你做到了這一點,你現在可以做你的查詢

select p from Product as p ORDER BY COUNT(p.numberOfBids) 

應該像一個魅力。

+0

如果我使用Hibernate註釋,我可以只執行以下操作嗎? (「SELECT(count(bids.id)WHERE bids.product_id = product_id))」) – Ger 2010-03-31 15:44:54

+0

我沒有使用hibernate的註釋,只是XML配置。 – Zoidberg 2010-03-31 16:00:21