Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当bean具有带有@Formula注释的属性时,findRowCount不起作用_Java_Database_Orm_Playframework 2.0_Ebean - Fatal编程技术网

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 > ?