Не сохраняются значения в базе данных
Почему id_house и id_tenant у меня null, если я отправляю значения? Дата сохраняет корректно. Как мне задать того, кто арендует и какую квартиру. Вероятно, что я некорректно как-то обрабатываю, потому что в Entity у меня они указаны в качестве классов. В общем, не понимаю с чем конкретно связано.
Принимаю значения:
@PostMapping("/rent")
@PreAuthorize("hasAuthority('user:write')")
public void homeRent(@RequestBody Contract contract) {
contractRepository.save(contract);
}
Contract:
@Data
@Entity
@Table(name = "contract", schema = "public")
public class Contract {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@ManyToOne
@JoinColumn(name = "id_house")
@ToString.Exclude
@EqualsAndHashCode.Exclude
@JsonIgnore
private House house;
@ManyToOne
@JoinColumn(name = "id_tenant")
@EqualsAndHashCode.Exclude
@ToString.Exclude
@JsonIgnore
private User user;
@Column(name = "end_date")
private LocalDate end_date;
@Column(name = "start_date")
private LocalDate start_date;
}
Запрос через Postman:
{
"start_date" : "2020-03-12",
"end_date" : "2020-03-19",
"id_house" : 2,
"id_tenant" : 3
}
Ответы (1 шт):
Автор решения: Blacit
→ Ссылка
Проблема была легко решена, необходимо было сохранять именно классы, вот моя реализация:
public class ContractDto {
@NotNull
@NotEmpty
private LocalDate start_date;
@NotNull
@NotEmpty
private LocalDate end_date;
@NotNull
@NotEmpty
private Long id_house;
@NotNull
@NotEmpty
private Long id_tenant;
public LocalDate getStart_date() {
return start_date;
}
геттеры, сеттеры..
}
Пример того, как сохранять:
@PostMapping("/rent")
@PreAuthorize("hasAuthority('user:write')")
public void homeRent(@RequestBody ContractDto contractDto) {
House house = houseRepository.findById(contractDto.getId_house()).orElseThrow();
User user = userRepository.findById(contractDto.getId_tenant()).orElseThrow();
Contract contract = new Contract();
contract.setHouse(house);
contract.setUser(user);
contract.setStart_date(contractDto.getStart_date());
contract.setEnd_date(contractDto.getEnd_date());
contractRepository.save(contract);
}