2011-05-27 16 views
0

私はPlayで計算されたフィールドで注文されたクエリを取得しようとしています。 これは私が使用しているクエリです。シエナで計算フィールドで注文することは可能ですか?

ポイントは私が持っている

public Integer points; 

として定義され、私は

int votes=objectWithPoints.points; 

を行う際にゲッターが正しく呼び出され、このゲッター

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; 
} 

のおかげで取得され

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

私は嫌だシエナからあまりにも多すぎますが、私はこれを(あるいは同様のコードで)動作させるのが大好きです。現在のところ、注文条件をスキップします。他のフィールドでの注文は正しく動作します。

答えて

0

あなたが少し過ぎると言ったら、あなたは本当だと思います。
Sienaクエリall().order("points").fetch()がDBにリクエストを実行します。 DBに格納された値は、プログラムには含まれません。

あなたが言っていることから、値を計算するゲッターgetPointsがあることがわかります。 しかし、この値をデータベースに保存しないと、Sienaでは注文を実行できません。

したがって、値を計算するか、オブジェクトに設定してオブジェクトをDBに保存します。

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

計算した値をプログラムで自分で並べ替えてください。