我有以下类(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