次のようなコードがあるとします。
Vehicle vehicle = vehicleRepostory.findByIdInitialized(vehicleId);
Vehicle
が見つからない場合、このメソッドはを返しnull
ます。仕様によると、この場合MyObjectNotFoundException
、コードは次のようになるようにスローする必要があります。
Vehicle vehicle = vehicleRepostory.findByIdInitialized(vehicleId);
MyObjectNotFoundException.throwIfNull(vehicle, Vehicle.class, vehicleId);
への呼び出しを削除したい場合はどうすればよいですかthrowIfNull
。それは実際には乾燥しておらず、とにかく貧弱な設計の選択です。私には知られていないデザインパターンがあるに違いありません。ウェブで検索しましたが、実際に使えるものは何も見つかりませんでした。
簡単な解決策は、コードをリポジトリに配置することかもしれませんが、これにはSpringDataを使用しているため、単なるインターフェイスです。
public interface VehicleRepository extends Repository<Vehicle, Long>
// ...
@Query("select v from Vehicle v LEFT JOIN FETCH v.technicalData td LEFT JOIN FETCH v.registrationData rd"
+ " where v.vehicleId = ?")
Vehicle findByIdInitialized(Long vehicleId);