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();