2012-11-16 16 views
8

Ho due classi, utente e auto. Entrambi hanno ManyToMany mappatura tra loro.Ebean ManyToMany query

utente:

@Entity 
public class User extends Model { 

    private int year; 

    @ManyToMany(cascade=CascadeType.ALL) 
    private List<Car> cars; 
} 

auto:

@Entity 
public class Car extends Model { 
    @ManyToMany(mappedBy = "cars", cascade=CascadeType.ALL) 
    private List<User> users; 
} 

Utilizzando ebean, vorrei interrogare solo le vetture all'anno 1999 che hanno dare all'utente nella loro lista. Non voglio scorrere l'elenco delle auto dell'utente nel codice Java.

Non ho trovato alcuna documentazione su come dovrebbero apparire le query many-to-many. Quindi vorrei qualcosa di simile:

public List<Car> findCars(int year, User user) { 
    return Car.find.where().eq("year", int).eq("users", user).findList(); 
} 

E 'possibile con Ebean?

risposta

11

check simile question (and answer)

Molto probabilmente il vostro cercatore dovrebbe essere simile:

public List<Car> findCars(int year, User user) { 
    return find.where().eq("year", year).eq("users.id", user.id).findList(); 
} 

BTW suppongo che abbiate una id campo, ma proprio non ci ha mostrato. Rendi pubblici anche i tuoi campi, quindi non dovrai scrivere getter/setter per ciascuno.

+0

Stavo usando campi privati ​​perché avevo problemi nel far funzionare i test senza getter/setter. http://stackoverflow.com/questions/13011874/why-ebean-returns-null-for-no-reason –

+0

Sì con i campi privati, è necessario scrivere getter pubblici, è normale – biesior

+0

Ovviamente :-) Ma il link nel mio commento descrive bug/funzionalità nel combo Ebean/Play 2 a cui mi riferivo. –

Problemi correlati