2012-07-28 22 views
6

Estoy usando Play 2.0.2 con ebean.filterMany para Play 2 devuelve todos los resultados

En Info clase, definida

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

private Date createdDate = new Date(); 

Y MemberInfo tiene memberId campo.

Cuando hago

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

devuelve todos Info, sin comprobar memberId de members.

¿Qué hice mal? Gracias.

Respuesta

8

filterMany() no filtra los resultados principales por expresiones secundarias (ambos tienen 'rangos' separados).

Como descriped in its API encontrará todos Info objetos y se filtra members para cada uno.

También hay un tema muy similar en Google Groups donde el autor de la pregunta da su propia solución para esto.

examinar la diferencia entre:

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

y

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

Entendido. Gracias. – coolsuntraveler

Cuestiones relacionadas