Vehicle のクラスがあり、VehicleParts の束をこの Vehicle にリンクしようとしています。明らかに、通常の車両に 2 つのエンジンを搭載することはできないため、それらを格納しようと考えているのはマップ、より具体的には 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 を保管する方法として受け入れられるものですか?
次に、この null エラーを解決する方法がわかりません。これについての助けをいただければ幸いです。