2012-11-16 12 views
8

Mam dwie klasy, użytkownika i samochodu. Oba mają wiele odwzorowań ManyToMany.Ebean ManyToMany zapytanie

użytkownika:

@Entity 
public class User extends Model { 

    private int year; 

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

Samochód:

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

Korzystanie ebean, chciałbym zapytać tylko tych samochodów z roku 1999, które mają dać użytkownikowi na ich listy. Nie chcę iterować nad listą samochodów użytkownika w kodzie Java.

Nie znalazłem żadnej dokumentacji, jak powinny wyglądać zapytania typu wiele-wiele. Tak więc chciałbym coś takiego:

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

Czy to możliwe z Ebean?

Odpowiedz

11

Sprawdź podobne question (and answer)

Najprawdopodobniej Twój wykrywacz powinien wyglądać następująco:

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

BTW Zakładam, że masz jakieś id boiska, ale po prostu nie pokazują nam. Upublicznij także swoje pola, więc nie będziesz musiał pisać dla każdego z nich.

+0

Używałem prywatnych pól, ponieważ miałem problemy z testowaniem pracy bez ustawiania/pobierania. http://stackoverflow.com/questions/13011874/why-ebean-returns-null-for-no-reason –

+0

Tak, z prywatnymi polami, musisz pisać public getters, to normalne – biesior

+0

Oczywiście :-) Ale link w moim komentarz opisuje błąd/funkcję w zestawie Ebean/Play 2, o którym mówiłem. –

Powiązane problemy