检索具有非空一对多关系的行数

Retrieving number of rows with non-empty one-to-many relation

我正在使用 Play Framework 2 (Java) 和 Ebean。在我的模型 类 中,我有 classAclassB 具有一对多关系。 classB 的关联 table 因此有一个字段包含 nullclassA 实体的 ID。

我想检索有一个或多个关联的 classB 实体的 classA 行数。在 SQL 术语中,我想做的是:

select count(id) from classA where id in (select classA_id from classB);

如何使用 Play Framework/Ebean 执行此操作?

我在想应该有一个内置的方法来执行这个简单的任务,而不是必须使用原始方法 SQL。请注意,从数据库中获取长列表然后计算条目数是不可行的Java:我想让数据库完成工作。

看看 documentation,他们很好地解释了如何构建查询。

int count = 
   Ebean.find(classB.class)
     .fetch("id")
     .where("classA_id IS NOT NULL")
     .findRowCount();

如果您想要 "distinct" 结果,请将 .setDistinct(true) 添加到查询中。