Tô tentando salvar no banco um objeto de uma entidade, mas não ta rolando por que ele acusa que um atributo ta indo como nulo. Segue os códigos:
@Entity(name = "alimentos")
@Table(name = "tb_alimentos")
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class Alimento {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id_alimento")
private Long id;
@Column(name = "data_doacao")
@CreatedDate
@Temporal(TemporalType.DATE)
private LocalDate dataDoacao;
@ElementCollection
@CollectionTable(name = "tags_alimento", joinColumns = @JoinColumn(name = "id_alimento"))
@Column(name = "tag")
private List<String> tags;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "restaurante_doador_id", nullable = false)
private Restaurante restauranteDoador;
@Column(name = "alimento_ativo", columnDefinition = "BIT(1) DEFAULT 1")
private Boolean ativo = true;
public Alimento(AlimentoDTO dadosAlimento) {
this.tags = dadosAlimento.tags();
this.restauranteDoador = new Restaurante(dadosAlimento.restauranteDoadorId());
}
public void desativarAlimento(){
this.ativo = false;
}
@PrePersist
protected void prePersist() {
dataDoacao = LocalDate.now();
}
}
@Service
public class AlimentoService {
@Autowired
AlimentoRepository alimentoRepository;
public Alimento salvarAlimento(Alimento newAlimento){
return alimentoRepository.save(newAlimento);
}
}
import java.util.List;
@RestController
public class AlimentoController {
@Autowired
private AlimentoService alimentoService;
@Autowired
private RestauranteService restauranteService;
@PostMapping("/alimentos")
public ResponseEntity<Alimento> cadastrarAlimento(@RequestBody AlimentoDTO alimentoDTO) {
Restaurante restauranteDoador = restauranteService.findRestauranteById(alimentoDTO.restauranteDoadorId());
if (restauranteDoador == null) {
return ResponseEntity.notFound().build();
}
Alimento alimento = new Alimento(alimentoDTO);
alimento.setRestauranteDoador(restauranteDoador);
Alimento novoAlimento = alimentoService.salvarAlimento(alimento);
return ResponseEntity.status(HttpStatus.CREATED).body(novoAlimento);
}
public record AlimentoDTO(List<String> tags, Long restauranteDoadorId) {
}
O repositório com o código completo é esse: https://github.com/trcosta97/GS-DBE