我有以下类(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
字段(play framework 会自动生成 getters 和 setters)。并且 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
关于java - 当 bean 具有带有 @Formula 注释的属性时,findRowCount 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12421239/