2011-05-27 69 views
0

我试图得到一个查询返回的顺序在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; 
} 

吸气剂正确调用,当我做

int votes=objectWithPoints.points; 

我有感觉我是假装从锡耶纳有点太多,但我会喜欢这个工作(或一些类似的代码)。目前它只是跳过订单条件。在任何其他领域订购都能正常工作。

回答

0

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

从你说的话,我看到你有一个getters计算一个值。 但是,如果您不将该值存储到数据库中,则锡耶纳不能执行该顺序。

因此,要么计算该值,将其设置在您的对象中并将对象保存到数据库。

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

你可以在你的程序中计算出你自己的数值后,