2

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

4

0 回答 0