我有一个车辆类,我想要做的是将一堆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的可接受方式吗? 其次,我不知道如何解决这个空错误。任何帮助都将不胜感激。