Я пытаюсь сохранить объект Run в базу данных. Я определил отношения между бегом и городом. В одном городе может быть много трасс. У меня проблема с city_id. Нулевой.
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement] with root cause
java.sql.SQLIntegrityConstraintViolationException: Column 'city_id' cannot be null
Мои объекты и контроллер: Город
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "cities")
public class City {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "city_id")
private long id;
@OneToMany(mappedBy = "city", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<Run> runs = new ArrayList<>();
private String name;
}
Запуск
@Entity
@Builder
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "runs")
public class Run {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "name_run")
private String nameRun;
@Column(name = "distance")
private double distance;
@Column(name = "date")
private Date date;
@Column(name = "my_time")
private String myTime;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "city_id", nullable = false)
@OnDelete(action = OnDeleteAction.CASCADE)
@JsonIgnore
private City city;
}
Контроллер
@CrossOrigin
@RestController
@RequestMapping("/api/")
public class RunController {
private RunRepository runRepository;
private RunService runService;
public RunController(RunRepository runRepository, RunService runService) {
this.runRepository = runRepository;
this.runService = runService;
}
@GetMapping("runs")
public ResponseEntity<List<Run>> getRuns() {
return runService.getRuns();
}
@PostMapping("runs")
public ResponseEntity addRun(@RequestBody Run run) {
return new ResponseEntity<>(runRepository.save(run), HttpStatus.OK);
}
}
Я хотел бы сохранить запустить в БД. Мой тестовый запрос выглядит следующим образом:
{"nameRun": "test", "distance": "5.0", "date": "2020-12-12", "myTime": "50:40" , "city": "test1"}
Результат вычисления выражения в Intelijj:
Почему City = null? Здесь ошибка в отображении?