我有以下课程:
@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
来电。
答案 0 :(得分:2)
所以你想要计数而不使用 findRowCount()方法并且不需要获取所有数据..
解决方案:复制相同的查询,并在表单select count(*) from ..
上创建并使用它查找计数
示例强>:
如果您的查询在表单上..
查询:SELECT * FROM clients
然后这行代码Client.find.where().gt("some_data", 0).findRowCount();
将等同于......
统计查询:SELECT COUNT(*) FROM clients WHERE some_data > 0
答案 1 :(得分:0)
一种可能的方法是使用 findlist() 方法并使用其 size() 方法获取行数而不是 findRowCount() 方法
返回Client.find.where()。gt(“totalOrdersAmount”,0).findList()。size();
答案 2 :(得分:0)
你应该调试一下,看看你错过了什么。它或者是描述的错误,或者你在某种程度上完全没有引用你的想法。我们都去过那里,但如果你能在那条线上断点并看到你的物体,那就确保一切都符合你的预期。一旦你试图处理数据库字段并引用它们,例如拼写错误就会引起很多麻烦。