【问题标题】:Retrieving number of rows with non-empty one-to-many relation检索具有非空一对多关系的行数
【发布时间】:2015-06-16 10:53:50
【问题描述】:

我将 Play Framework 2 (Java) 与 Ebean 一起使用。在我的模型类中,我有 classAclassB 的一对多关系。因此,classB 的关联表有一个字段,其中包含 nullclassA 实体的 id。

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

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

如何使用 Play 框架/Ebean 做到这一点?

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

【问题讨论】:

  • select count(distinct a.id) from classA a join classB b on b.classA_id = a.id
  • 这仍然是原始 SQL。您将如何使用 Ebean 做到这一点?

标签: playframework playframework-2.3 ebean


【解决方案1】:

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

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

如果您想要“不同”的结果,请将.setDistinct(true) 添加到查询中。

【讨论】:

  • 这不是一个糟糕的解决方案,我什至可以通过使用内置的isNotNull() 编写.where().isNotNull("classA") 来减少原始SQL 的数量。现在剩下的唯一问题是.setDistinct()(我当然需要)在 Ebean 中不起作用(至少在 Play Framework 2.3.9 中不起作用):stackoverflow.com/questions/19472511/…
  • 可以选择更新到 Play Framework 2.4 吗?他们声明 2.4 将支持更新版本的 EBean。
  • 不管怎样,既然这个问题现在已经归结为另一个问题,即setDistinct()不起作用,我会接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 2012-02-29
  • 2021-05-18
相关资源
最近更新 更多