java - 当 bean 具有带有 @Formula 注释的属性时,findRowCount 不起作用

标签 java database orm playframework-2.0 ebean

我有以下类(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)。并且 countClientsWithDatawhere 子句中使用该字段。现在如果我这样做

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/

相关文章:

python - 使用 MD5 和 SQL 进行服务器授权

java - 多对多 Spring Boot JPA 未填充 ManyToMany 表

node.js - ORM:Sequelize:多对多关系查询

java - 如何在 Spark 中管理 JavaRDD<LabeledPoint> 数据结构

java - OpenCV Android - 尝试使示例应用程序工作

java - 使用 Java 在 Google App Engine 中读取请求参数

python - 是否可以对 OuterRef 表达式进行算术运算?

java - 从 Java 代码将 JSON 文件批量上传/导入到 Azure Cosmos DB

android,如何在 sqlitedatabase 中执行 sql 文件

php - 如何在mysql中存储阿拉伯字体