在Play框架中映射NullPointerException

时间:2013-05-27 02:19:42

标签: java playframework playframework-2.0 ebean

我有一个车辆类,我想要做的是将一堆VehicleParts链接到这辆车。显然,普通车辆不能有两个引擎,所以我想将它们存储在一个地图中,更具体地说是一个EnumMap

public enum VehiclePartType {
  ENGINE_BLOCK,
  CRANKSHAFT,
  //..etc
}

public class VehiclePart {
  public String name;
  public VehiclePartType partType;
  //some more basic variables + ModelFinder
}

public class Vehicle {

  //some basic string variables and a ModelFinder

@ManyToMany
public Map<VehiclePartType, VehiclePart> parts = 
  new EnumMap<VehiclePartType, VehiclePart>(VehiclePartType.class);

}

用法:当我尝试将某个部件与给定车辆相关联时。

Vehicle vehicle = Vehicle.finderVehicle.byId(id);
VehiclePart vehiclePart = VehiclePart.finderVehiclePart.byId(partId);
vehicle.parts.put(VehiclePartType.ENGINE_BLOCK, vehiclePart);
vehicle.saveManyToManyAssociations("parts");

这会在SQL数据库中创建我想要的表并存储正确的引用ID,但每当我尝试通过Java代码访问它时,例如以下代码,我都会收到错误:

Vehicle.allVehicles();

[RuntimeException: java.lang.IllegalArgumentException: (was java.lang.NullPointerException)
(through reference chain: com.avaje.ebean.common.BeanList[1]->models.Vehicle["parts"])] 

如果我将地图更改为列表,这样可以正常工作,但这不是我想要的,因为如果不搜索整个部件列表,我将无法通过其VehiclePartType获取部件。

首先,这是存储VehicleParts的可接受方式吗? 其次,我不知道如何解决这个空错误。任何帮助都将不胜感激。

0 个答案:

没有答案