Запрос Ebean ManyToMany

У меня есть два класса, пользователь и автомобиль. Оба имеют сопоставление ManyToMany друг с другом.

Пользователь:

@Entity
public class User extends Model {

    private int year;

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

Машина:

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

Используя ebean, я хотел бы запрашивать только те автомобили 1999 года, которые имеют пользователя в своем списке. Я не хочу перебирать список автомобилей пользователя в коде Java.

Я не нашел никакой документации о том, как должны выглядеть запросы «многие ко многим». Итак, я бы сделал что-то вроде этого:

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

Возможно ли это с Ebean?


person Petteri H    schedule 16.11.2012    source источник


Ответы (1)


Проверьте аналогичный вопрос (и ответ)

Скорее всего, ваш поисковик должен выглядеть так:

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

Кстати, я предполагаю, что у вас есть поле id, но оно нам не показано. Также сделайте свои поля общедоступными, поэтому вам не нужно будет писать геттеры/сеттеры для каждого.

person biesior    schedule 16.11.2012
comment
Я использовал закрытые поля, так как у меня были проблемы с работой тестов без геттеров/сеттеров. stackoverflow.com/questions/13011874 / - person Petteri H; 16.11.2012
comment
Да с приватными полями нужно писать публичные геттеры, это нормально - person biesior; 16.11.2012
comment
Очевидно :-) Но ссылка в моем комментарии описывает ошибку/функцию в комбо Ebean/Play 2, о которой я говорил. - person Petteri H; 16.11.2012