我有一个 Vehicle 类,我想做的是将一堆 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 的方式吗?
其次,我不确定如何解决这个空错误。对此的任何帮助将不胜感激。