可以在siena中按计算字段排序吗?

时间:2011-05-27 14:45:07

标签: sql-order-by playframework siena

我正在尝试获取在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,但我希望这可以工作(或类似的代码)。目前它只是跳过订单条件。在任何其他字段上订购都可以正常工作。

1 个答案:

答案 0 :(得分:0)

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

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

因此,要么计算值,要在对象中设置它并将对象保存到DB。

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

您可以在计算后自行在程序中订购值。