首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PlayFramework 2.x Ebean查询匹配集合中的许多属性

PlayFramework 2.x Ebean查询匹配集合中的许多属性
EN

Stack Overflow用户
提问于 2013-11-22 17:07:59
回答 2查看 1K关注 0票数 2

我有一个模型对象,看起来像这样:

代码语言:javascript
运行
复制
@SuppressWarnings("serial")
@Entity
@Table(name = "selections")
public class Selection extends Model {

    ....

    @ManyToMany
    private Set<Market> markets;

    ....
}

其中Selection和Market都有id属性和static Finder<Long, *> find()方法。

我试图找到包含一个集合中的Market的所有Selection对象。

代码语言:javascript
运行
复制
@Override @Transactional(readOnly = true) public List<Selection> findSelections(Set<Market> markets) {

    // Query?
    return Selection.find().where()...findList();
}

我知道我可以这样做:

代码语言:javascript
运行
复制
return Selection.find().where().eq("markets.id", market.id).findList();

找到一个单一的市场对象--但是如何从集合中找到这些对象呢?而不对集合进行迭代?

EN

回答 2

Stack Overflow用户

发布于 2013-12-04 17:00:01

代码语言:javascript
运行
复制
return Selection.find().where().in("markets",markets).findList();
票数 4
EN

Stack Overflow用户

发布于 2016-04-03 11:13:34

我一直在为同样的问题而苦苦挣扎,在阅读了another SO questionthe Ebean's Interface Query documentation之后,我得出了以下结论:

代码语言:javascript
运行
复制
// Prepare the OQL query string
String oql = "find selection " +
    "where markets.id in (:marketList) " +
    "group by id " +
    "having count(distinct markets.id) = :marketCount";

// Create the query
Query<Selection> query = Selection.find.setQuery(oql);

// Set the list of market IDs
List<Long> marketIds = Arrays.asList(1, 30, 9, 15, 6);

// Set query parameters (list of market IDs and how many they are)
query.setParameter("marketList", marketIds);
query.setParameter("marketCount", marketIds.size());

// Get the matching results
List<Selection> selections = query.findList();

我正在使用带有sbt-play-ebean插件版本2.0.0Play 2.4.2,它提供avaje-ebeanorm版本6.8.1

对于一些额外的功能,您可能会对阅读this question感兴趣。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20140912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档