2010-03-31 74 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