我有以下类(class):

@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字段(播放框架将自动生成getter和setter)。 countClientsWithData也在where子句中使用此字段。现在如果我这样做
int count = Client.countClientsWithData();

尝试执行查询时将抛出NullPointerException
select count(*) from clients t0 where inv.some_data > ?

好像findRowCount无法识别@Formula批注中的联接。关于如何解决此问题有任何想法吗?

更新了问题:将问题缩小为findRowCount调用。

最佳答案

因此,您需要计数而不使用findRowCount()方法,而无需获取所有数据。

解决方案:复制相同的查询,并以select count(*) from ..形式进行查询,并使用它来查找计数

示例:

如果您的查询在表单上..

查询:SELECT * FROM clients
然后这行代码Client.find.where().gt("some_data", 0).findRowCount();将等同于..

计数查询:SELECT COUNT(*) FROM clients WHERE some_data > 0

07-27 22:44