filterMany for Play 2 возвращает все результаты

Я использую Play 2.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,

Что я сделал не так? Благодарю.

1 ответ

Решение

filterMany() не фильтрует родительские результаты по выражениям детей (оба имеют отдельные "диапазоны").

Как описано в его API, он найдет все Info объекты и отфильтрованные members для каждого.

Существует также очень похожая тема в группах Google, где автор вопроса предлагает свой собственный обходной путь для этого.

Изучите разницу между:

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

а также

find.fetch("members")
    .where().eq("members.memberId", 1L)
    .findList();
Другие вопросы по тегам