2

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 エラーを解決する方法がわかりません。これについての助けをいただければ幸いです。

4

0 に答える 0