Найти сохраненный объект по получателям - PullRequest
2 голосов
/ 05 мая 2011

Предположим, у меня есть 2 модели

Public class Bus extends Model{

    @OneToMany(mappedBy="bus")
    private List<Passenger> passengers;

    public Bus(passengers){
        this.passengers=passengers;
    }

    public List<Passenger> getPassengers(){
        return passengers;
    }
}

public Class Passenger extends Model{

    @ManyToOne
    private Bus bus;

    public Passenger(Bus bus){
        this.bus=bus;
    }
}

Могу ли я использовать метод контроллера, который находит всех пассажиров в автобусе с использованием геттера. например:

public static void getPassengers(Long busId){
    Bus bus = Bus.findById(busId);
    List<Passengers> pList = bus.getPassengers();
}

Я пробовал это в реальном игровом веб-приложении, но возвращаемый размер списка всегда равен 0.

Заранее спасибо.

1 Ответ

1 голос
/ 05 мая 2011

Могу ли я использовать метод контроллера, который находит всех пассажиров в автобусе с использованием геттера?

Да, вы можете. Но я думаю, что проблема не в том, чтобы использовать геттер, а в том, что вы неправильно построили свои модели.

В вашем примере я вижу 3 проблемы:

  1. В вашем действии контроллера getPassengers(Long busId) вам нужно изменить List<Passengers> на List<Passenger> (единственное число «Пассажир»)

  2. В вашем классе Bus модели вам нужно либо сделать passengers общедоступным, либо объявить общедоступный установщик. Игра!" способ состоит в том, чтобы просто объявить поля как открытые и позволить инфраструктуре генерировать для вас методы получения и установки. Единственная причина, по которой вы бы объявили свои собственные методы получения и установки, заключается в том, что вам нужно добавить некоторую логику.

  3. В вашем классе Passenger вам нужно сделать bus общедоступным.

Вот как я бы исправил ваш код:

public class Bus extends Model{

    @OneToMany(mappedBy="bus")
    public List<Passenger> passengers;

    public Bus(passengers){
        this.passengers=passengers;
    }

    // No need for getters or setters, but we'll add a getter for the sake of this question:
    public List<Passenger> getPassengers() {
        return this.passengers;
    }
}

public class Passenger extends Model{

    @ManyToOne
    public Bus bus;

    public Passenger(Bus bus){
        this.bus = bus;
    }
}

И действие вашего контроллера:

public static void getPassengers(Long busId){
    Bus bus = Bus.findById(busId);
    List<Passenger> pList = bus.getPassengers();
    render(pList); // or whatever rendering you want to do
}

Если это не решит вашу проблему, значит, вы неправильно загружаете свои данные. Вам следует опубликовать код, который вы запускаете, чтобы фактически создать записи - загружает ли это файл YAML или что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...