Могу ли я использовать метод контроллера, который находит всех пассажиров в автобусе с использованием геттера?
Да, вы можете. Но я думаю, что проблема не в том, чтобы использовать геттер, а в том, что вы неправильно построили свои модели.
В вашем примере я вижу 3 проблемы:
В вашем действии контроллера getPassengers(Long busId)
вам нужно изменить List<Passengers>
на List<Passenger>
(единственное число «Пассажир»)
В вашем классе Bus
модели вам нужно либо сделать passengers
общедоступным, либо объявить общедоступный установщик. Игра!" способ состоит в том, чтобы просто объявить поля как открытые и позволить инфраструктуре генерировать для вас методы получения и установки. Единственная причина, по которой вы бы объявили свои собственные методы получения и установки, заключается в том, что вам нужно добавить некоторую логику.
В вашем классе 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 или что-то в этом роде.