1
resposta

Método PUT, atualizar uma Coluna no Banco que relaciona tabelas

Bom dia Rodrigo, eu queria saber como posso atualizar um um registro associativo por exemplo eu tenho um cliente, vinculado a uma empresa, porém quero desvincular esse cliente dessa empresa e vincular ele a outra como faço isso no método PUT eu faço a requisição mas ele não atualiza o registro da coluna que faz a associação

public class ClienteForm {

private String cpf;
private String email;
private String nomeCompleto;
private String telefone;
private String nomeDaEmpresa;


public Cliente converterToEntity(EmpresaService empresaService){
    Empresa empresa = empresaService.findByNomeEmpresaSemPage(nomeDaEmpresa);

    return new Cliente(cpf, email, nomeCompleto, telefone, empresa);
}

public Cliente atualizarCliente(Long id, ClienteService clienteService){

    Cliente cliente = clienteService.getOne(id);
    cliente.setNomeCompleto(this.nomeCompleto);
    cliente.setCpf(this.cpf);
    cliente.setTelefone(this.telefone);
    cliente.setEmail(this.email);



    return cliente;
}





@Entity
@Table(name ="cliente")
public class Cliente implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "nome_completo")


    private String nomeCompleto;
    @Column(name = "cpf")
    @CPF

    private String cpf;
    @Column(name = "email")
    @Email
    private String email;

    @Column(name = "telefone")
    @NotNull
    @NotEmpty
    private String telefone;


    @ManyToOne
    private Empresa empresa;

    public Cliente() {
    }

    public Cliente(String cpf, String email, String nomeCompleto, String telefone, Empresa empresa) {
        this.cpf = cpf;
        this.email = email;
        this.nomeCompleto = nomeCompleto;
        this.telefone = telefone;
        this.empresa = empresa;


    }


public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getNomeCompleto() {
    return nomeCompleto;
}

public void setNomeCompleto(String nomeCompleto) {
    this.nomeCompleto = nomeCompleto;
}

public String getCpf() {
    return cpf;
}

public void setCpf(String cpf) {
    this.cpf = cpf;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getTelefone() {
    return telefone;
}

public void setTelefone(String telefone) {
    this.telefone = telefone;
}

public Empresa getEmpresa() {
    return empresa;
}

public void setEmpresa(Empresa empresa) {
    this.empresa = empresa;
}

}

public class ClienteDTO { private Long id; private String cpf; private String email; private String nomeCompleto; private String telefone;

public ClienteDTO(Cliente cliente){
    this.id = cliente.getId();
    this.cpf = cliente.getCpf();
    this.email = cliente.getEmail();
    this.nomeCompleto = cliente.getNomeCompleto();
    this.telefone = cliente.getTelefone();
}

public static Page<ClienteDTO> converterToDto(Page<Cliente> empresas){

    return empresas.map(ClienteDTO::new);

}


public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getCpf() {
    return cpf;
}

public void setCpf(String cpf) {
    this.cpf = cpf;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getNomeCompleto() {
    return nomeCompleto;
}

public void setNomeCompleto(String nomeCompleto) {
    this.nomeCompleto = nomeCompleto;
}

public String getTelefone() {
    return telefone;
}

public void setTelefone(String telefone) {
    this.telefone = telefone;
}

}

@Transactional @PutMapping("/{id}") public ResponseEntity clienteOptional = clienteService.findById(id); if (!clienteOptional.isPresent()){

        return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Cliente não encontrado, não foi possível atualizar os dados!");

    }
    Cliente cliente = clienteForm.atualizarCliente(id, clienteService);
    return ResponseEntity.ok(new ClienteDTO(cliente));

}

1 resposta

Oi Carlos,

Você precisa receber no ClienteForm o id da empresa a qual o cliente deve ser vinculado, carregar a empresa pelo id no banco e setar no cliente.

Algo assim:

public Cliente atualizarCliente(Long id, ClienteService clienteService, EmpresaService empresaService) {
    Cliente cliente = clienteService.getOne(id);
    cliente.setNomeCompleto(this.nomeCompleto);
    cliente.setCpf(this.cpf);
    cliente.setTelefone(this.telefone);
    cliente.setEmail(this.email);

    Empresa empresa = empresaService.getOne(this.idEmpresa);
    cliente.setEmpresa(empresa);

    return cliente;
}