我有两个具有一对多关系的模型。让我们说它是一个产品的拍卖,产品可以有很多出价。
基本上我想做的就是取出所有产品,但按照他们收到的出价数量来订购。
到目前为止我得到的是:
"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 :(得分:0)
您可以在产品上添加名为numberOfBids的属性,然后将其映射为
<property name="numberOfBids">
<formula>
(SELECT (count(bids.id) WHERE bids.product_id = product_id)))
</formula>
</property>
现在这个方法唯一的问题是公式中的查询标签必须是直接的SQL。所以它是特定于数据库的。在此查询中,出价是数据库中出价表的nane,而product_id是包含产品ID的产品中的字段的名称。此外,您还必须向Product数据对象添加long类型的属性。
完成此操作后,您现在可以进行查询
select p from Product as p ORDER BY COUNT(p.numberOfBids)
应该像魅力一样工作。