User
jest w Driver
.
Driver
jest w Vehicle
.
Jak chcę zapisać vehicle:
@RestController
@RequestMapping("/api/vehicles")
public class VehicleController {
// ...
@PostMapping
@ResponseStatus(code = HttpStatus.CREATED)
public VehicleDto createNewVehicle(@RequestBody VehicleDto dto) {
return service.createNewVehicle(dto);
}
// ...
}
}
JSON:
{
"vin": "1G11E5SL6EU150861",
"mileageKm": 1434,
"capacityKg": 15300,
"purchaseDate": [
2018,
1,
17
],
"driverDto": {
"id": 1
}
}
to dostaję komunikat błędu:
org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.julian.bella.domain.Vehicle.driver -> com.julian.bella.domain.Driver; nested exception is java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.julian.bella.domain.Vehicle.driver -> com.julian.bella.domain.Driver"
no, ale przecież wybrałem Drivera już zapisanego:
@Service
public class VehicleServiceImpl implements VehicleService {
// ...
@Override
public VehicleDto saveVehicle(Vehicle vehicle) {
Vehicle v = repo.save(vehicle);
return mapper.sourceToDto(v);
}
@Override
public VehicleDto createNewVehicle(VehicleDto dto) {
System.out.println(dto.getDriverDto());
dto.setDriverDto(drvService.getDriver(dto.getDriverDto().getId()));
System.out.println(dto.getDriverDto());
Vehicle v = mapper.dtoToNewSource(dto);
return this.saveVehicle(v);
}
// ...
}