Mysql Ebean manytomy:模型A有多个。选择计数(*)B,其中B在A的列表中

Mysql Ebean manytomy:模型A有多个。选择计数(*)B,其中B在A的列表中,mysql,jpa,playframework-2.0,ebean,Mysql,Jpa,Playframework 2.0,Ebean,该应用程序允许用户选择我们监视推特流的某些关键字 每个关键字都包含一个包含其关键字的tweet ID列表 public class Keyword extends Model { @Id int id; String keyword; @ManyToMany public List<Tweet> tweets = new ArrayList(); } public class Tweet extends Model { @Id int id; TimeStamp da

该应用程序允许用户选择我们监视推特流的某些关键字

每个关键字都包含一个包含其关键字的tweet ID列表

public class Keyword extends Model {

@Id
int id;
String keyword;

@ManyToMany
public List<Tweet> tweets = new ArrayList();
}

public class Tweet extends Model {

@Id
int id;
    TimeStamp datetime;
}
如何从Tweet.id位于Keyword.Tweets中的Tweet中选择*

还有,在Ebean中,我如何获得只包含日期和计数*的列表


谢谢大家

您可以使用以下内容:

Keyword targetKeyword = Keyword.find.byId(1L);
List<Tweets> foundTweets = new ArrayList<Tweets>();
for(Tweet tw : Tweets.find.all()) {
    if(targetKeyword.tweets.contains(tw))
          foundTweets.add(tw);
}
return foundTweets;

此代码将返回关键字id 1中包含的所有推文。您可以将其放入传递所需关键字id的函数中,而不是1L。

谢谢!在这种情况下,我担心效率。我的应用程序将有数百万条tweet,加载每一条tweet,然后迭代每一条tweet,而不是一个SQL查询,这会不会影响性能?您可以使用来自ebean的原始SQL:ebean有一个内置的查询语言。您可能也想尝试一下:您可以尝试这些方法并比较它们的性能。但我对Ebean和/或dbms不是很有经验。因此,如果性能成为一个严重的瓶颈,您可能需要寻找其他解决方案;
Keyword targetKeyword = Keyword.find.byId(1L);
List<Tweets> foundTweets = new ArrayList<Tweets>();
for(Tweet tw : Tweets.find.all()) {
    if(targetKeyword.tweets.contains(tw))
          foundTweets.add(tw);
}
return foundTweets;