13

私は次のクラスを持っています:

@Entity
@Table(name = "clients")
public class Client extends Model {
    @Id
    public int id;

    @Formula(select = "inv.some_data", 
            join = "left join (select 1 as some_data) as inv")
    public int someData;

    public static Finder<String, Client> find = 
        new Finder<String, Client>(String.class, Client.class);

    public static int countClientsWithData() {
        return Client.find.where().gt("someData", 0).findRowCount();
    }
}

フィールドがありsomeDataます (play フレームワークはゲッターとセッターを自動的に生成します)。またcountClientsWithData、このフィールドをwhere句で使用します。今私がするなら

int count = Client.countClientsWithData();

NullPointerExceptionクエリを実行しようとするとスローされます

select count(*) from clients t0 where inv.some_data > ?

注釈findRowCountの結合を認識していないようです。@Formulaこの問題を回避する方法について何か考えはありますか?

更新された質問:findRowCount呼び出す問題を絞り込みました。

4

3 に答える 3

2

したがって、findRowCount()メソッドを使用せずに、すべてのデータをフェッチせずにカウントが必要です..

解決策:同じクエリをコピーしてフォームに作成し、select count(*) from ..それを使用してカウントを見つけます

あなたのクエリがフォーム上にある場合..

クエリ:SELECT * FROM clients

次に、このコード行はClient.find.where().gt("some_data", 0).findRowCount();..

カウントクエリ:SELECT COUNT(*) FROM clients WHERE some_data > 0

于 2013-05-26T09:15:27.610 に答える
0

これをデバッグして、何が欠けているかを確認する必要があります。説明されているようにバグであるか、何らかの形で自分が思っていることをまったく参照していません。しかし、その行でブレークポイントを設定してオブジェクトを表示できる場合は、すべてが期待どおりに見えることを確認してください。データベースフィールドを処理して参照しようとすると、たとえばスペルミスが多くの頭痛の種になります。

于 2012-10-17T16:55:24.247 に答える
0

考えられる方法の 1 つは、findlist()メソッドを使用し、そのsize()メソッドを使用して、 findRowCount()メソッドの代わりに行数を取得することです。

return Client.find.where().gt("totalOrdersAmount", 0).findList().size();

于 2012-09-24T12:29:09.127 に答える