Java 当bean具有带有@Formula注释的属性时,findRowCount不起作用
我有以下课程:Java 当bean具有带有@Formula注释的属性时,findRowCount不起作用,java,database,orm,playframework-2.0,ebean,Java,Database,Orm,Playframework 2.0,Ebean,我有以下课程: @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 stati
@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();
}
}
它将在尝试执行查询时抛出NullPointerException
select count(*) from clients t0 where inv.some_data > ?
findRowCount似乎无法识别@Formula批注中的联接。你对如何解决这个问题有什么想法吗
更新问题:将问题缩小到findRowCount调用。一种可能的方法是使用findlist方法并使用其大小方法来获取行数,而不是findRowCount方法 返回Client.find.where.gttotalOrdersAmount,0.findList.size
您应该对此进行调试,看看缺少什么。它要么是一个所描述的bug,要么你根本没有引用你认为自己是什么。虽然我们都去过,但如果您可以在该行中断并看到您的对象,只需确保一切都是您期望的样子。一旦您添加了试图处理数据库字段并引用它们的内容,例如拼写错误就会引起很多麻烦。因此您希望在不使用findRowCount方法和不获取所有数据的情况下进行计数 解决方案:复制相同的查询,并在表单上选择count*from。。然后用它来找到计数 例如: 如果您的查询在表单上 查询:从客户端选择* 然后这行代码Client.find.where.gtsome_data,0.findRowCount;将等同于
计数查询:从某些数据>0的客户端选择计数*,这是一个错误。现在就使用zaffargachal所说的。这不是对你的问题的回答,只是我的观点,但是如果你真的想使用SQL,那么你应该使用iBatis/MyBatis。如果您想使用JPA,那么使用JPA并避免SQL,避免SQL,避免SQL。这是否意味着它将从数据库中获取整个表?是的,它将加载Java堆中的所有内容:-不,它将在应用聚合函数后按行获取分组,其他一切都像预期的那样工作,因为zaffargachal的答案是有效的,除了它能得到整张桌子
select count(*) from clients t0 where inv.some_data > ?