【问题标题】:Ordering by number of relationships in Hibernate在 Hibernate 中按关系数量排序
【发布时间】:2010-03-31 15:27:44
【问题描述】:

我有两个具有一对多关系的模型。假设它是对产品的拍卖,并且该产品可以有很多出价。

基本上我想做的是取出所有产品,但按他们收到的投标数量排序。

到目前为止我得到的是:

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

但是,这似乎只提取了一种带有出价的产品。如果我想在休眠查询期间订购,我通常可以做类似的事情

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

我以为我可以按照

的方式做一些事情
"select p from Product as p ORDER BY COUNT(p.bids)";

但我不能。

有人对此类问题有任何建议或经验吗?

谢谢, -齿轮

【问题讨论】:

    标签: mysql hibernate


    【解决方案1】:

    您可以在您的产品上放置一个名为 numberOfBids 的属性,然后像这样映射它

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

    现在这个方法的唯一问题是公式标签中的查询必须是直接的 SQL。所以它是特定于数据库的。在此查询中,bids 是数据库中 bids 表的名称,product_id 是 products 中包含产品 id 的字段的名称。此外,您还必须向 Product 数据对象添加一个 long 类型的属性。

    完成此操作后,您现在可以进行查询

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

    应该像魅力一样工作。

    【讨论】:

    • 如果我正在使用 Hibernate 注释,我可以执行以下操作吗? @Formula("SELECT (count(bids.id) WHERE bids.product_id = product_id))")
    • Hibernate 没有使用注解,只是 XML 配置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 2019-05-14
    • 2016-11-10
    • 1970-01-01
    相关资源
    最近更新 更多