假设我有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.
提前致谢。
答案 0 :(得分:1)
我可以使用控制器方法使用吸气剂查找公交车上的所有乘客吗?
是的,你可以。但我认为问题不是使用吸气剂,而是你没有正确构建模型。
我在你的例子中看到了3个问题:
在您的控制器操作getPassengers(Long busId)
中,您需要将List<Passengers>
更改为List<Passenger>
(单数“乘客”)
在Bus
模型类中,您需要公开passengers
或声明公开制定者。表演!”方法是将字段声明为public,让框架为您生成getter和setter。你宣布自己的getter和setter的唯一原因是你需要添加一些逻辑。
在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文件还是其他任何内容。