7

Play2.0.2をebeanで使用しています。

Infoクラスでは、私は定義し ました

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

private Date createdDate = new Date();

そして、フィールドMemberInfoがありmemberIdます。

私がする時

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グループにも非常によく似たトピックがあります。

次の違いを調べます。

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 に答える