7

我正在使用带有 ebean 的 Play 2.0.2。

Info课堂上,我定义

@ManyToMany(fetch=FetchType.EAGER)
private Set<MemberInfo> members;

private Date createdDate = new Date();

MemberInfomemberId场。

当我做

public static Finder<Long,Info> find 
        = new Finder<Long,Info>(Long.class, Info.class);

find.fetch("members")
    .where().filterMany("members").eq("memberId", memberId)
    .order().desc("createdDate")
    .findList();

它返回全部,Info而不检查memberId.members

我做错什么了?谢谢。

4

1 回答 1

9

filterMany()不按子表达式过滤父结果(两者都有单独的“范围”)。

正如其 API 中所描述的,它将找到所有 Info对象并为每个对象进行过滤members

Google Groups上也有非常相似的主题,问题的作者为此提供了自己的解决方法。

检查以下之间的区别:

find.fetch("members")
    .where().filterMany("members").eq("memberId", 1L)
    .findList();

find.fetch("members")
    .where().eq("members.memberId", 1L)
    .findList();
于 2012-07-28T20:26:44.320 回答