【问题标题】:Is possible in siena to order by a calculated field?可以在siena中按计算字段排序吗?
【发布时间】:2011-05-27 14:45:06
【问题描述】:

我正在尝试按在 Play 中计算的字段排序返回查询。 这是我正在使用的查询。

return all().order("points").fetch();

其中点被定义为

public Integer points;

并且由于这个getter而被检索

public int getPoints(){
    List<EventVote> votesP = votes.filter("isPositive", true).fetch();
    List<EventVote> votesN = votes.filter("isPositive", false).fetch();
    this.points= votesP.size()-votesN.size();
    return this.points;
}

当我这样做时,getter 被正确调用

int votes=objectWithPoints.points;

我觉得我在 siena 上假装有点过头了,但我希望它能够正常工作(或一些类似的代码)。目前它只是跳过订单条件。任何其他字段的排序都可以正常工作。

【问题讨论】:

    标签: sql-order-by playframework siena


    【解决方案1】:

    当你说你等待的时间有点多时,我认为你是对的 :)
    Siena 查询all().order("points").fetch() 执行对数据库的请求。 因此它会将存储到数据库中的值排序,而不是存储到您的程序中。

    从你所说的,我看到你有一个 getPoints 来计算一个值。 但是,如果您不将此值存储到数据库中,则 Siena 无法执行排序。

    因此,要么计算值,将其设置在对象中,然后将对象保存到数据库。

    objectWithPoints.points = getPoints();
    objectWithPoints.save();
    

    计算后,您可以自己在程序中对值进行排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-06
      • 2011-08-26
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多