Olá, estou tendo problemas ao salvar dados de um formulário. O problema é que ao salvar os dados no front-end os dados vão para suas respectivas tabelas. No caso, são duas. Uma tem que ter a chave primaria de uma outra. Mas ao salvar não é possivel adicionar a chave estrangeira de uma forma automatica. Creio que é na minha implementação do controller. Peço a ajuda de quem souber fazer isso.
Obs: Sou novo em frontend.
abaixo vai um trexo meu código do Controller
@Controller
public class ClienteController {
@Autowired
private ClienteRepository clienteRepository;
@SuppressWarnings("unused")
@Autowired
private PessoaRepository pessoaRepository;
@GetMapping("/formCliente")
public ModelAndView cadastrarClientes(Pessoa pessoa, Cliente cliente) {
ModelAndView mv = new ModelAndView();
mv.setViewName("Cliente/formCliente");
mv.addObject("cliente",new Cliente());
mv.addObject("pessoa",new Pessoa());
return mv;
}
@RequestMapping("/salvarClientes")
public ModelAndView salvarCliente(
@Valid Cliente cliente,
Pessoa pessoa,
Short codigo,
BindingResult br
) throws Exception {
ModelAndView mv = new ModelAndView();
if (br.hasErrors()) {
mv.setViewName("Cliente/formCliente");
mv.addObject("cliente");
mv.addObject("pessoa");
} else {
mv.setViewName("redirect:/clientes-adicionados");
pessoaRepository.save(pessoa);
clienteRepository.save(cliente);
}
return mv;
}
}
@Column(name = "nome")
@Size(min = 5, max = 35,message = "O nome deve conter no minimo 5 caracteres")
@NotNull(message = "o campo nome não pode ser nulo")
private String nome;
@Column(name = "cpf")
@Size(max = 14)
@NotBlank(message ="O cpf não pode ser vazio")
@NotNull(message = "o campo cpf não pode ser nulo")
private String cpf;
@Column(name = "rg")
@Size(max = 12)
@NotBlank(message ="O rg não pode ser vazio")
@NotNull(message = "o campo rg não pode ser nulo")
private String rg;
@Column(name = "rua")
@Size(max = 10)
@NotBlank(message ="O rua não pode ser vazio")
@NotNull(message = "o campo rua não pode ser nulo")
private String rua;
@Column(name = "numero")
@NotNull(message = "o campo numero não pode ser nulo")
private Short numero;
@Column(name = "bairro")
@Size(max = 30)
@NotBlank(message ="O bairro não pode ser vazio")
@NotNull(message = "o campo bairro não pode ser nulo")
private String bairro;
@Column(name = "cep")
@Size(max = 10)
@NotBlank(message ="O cep não pode ser vazio")
@NotNull(message = "o campo cep não pode ser nulo")
private String cep;
@Column(name = "complemento")
@Size(max = 10)
@NotBlank(message ="O complemento não pode ser vazio")
@NotNull(message = "o campo complemento não pode ser nulo")
private String complemento;
@Column(name = "telefone")
@Size(max = 13)
@NotBlank(message ="O telefone não pode ser vazio")
@NotNull(message = "o campo telefone não pode ser nulo")
private String telefone;
@Column(name = "celular")
@Size(max = 14)
@NotBlank(message ="O celular não pode ser vazio")
@NotNull(message = "o campo celular não pode ser nulo")
private String celular;
@Column(name = "email")
@Size(max = 100)
@NotBlank(message ="O email não pode ser vazio")
@NotNull(message = "o campo email não pode ser nulo")
private String email;
// inserir chave estrangeira
}
E aonde esta a chave primaria:
@Data @MappedSuperclass
public class GenericDomain {
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private Short codigo;
sim, mas para ser chave estrageira na tabela cliente ele tem que pegar a chave primaria da tabela pessoa. Foi isso que eu quiz dizer. Pois para ser chave estrangeira a mesma chave tem que esta em uma outra tabela sendo ela uma chave primaria.
entendi agora, é o seguinte, vc ta passando duas classe no como paramento, só precisa de apenas uma que é onde está a chave estrangeira, o spring ele já consegue mapear automaticamente, basta passar o objeto correto na sua view