Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Conversão de boolean para smallint

Estou tendo um problema com a conversão do ativo, que no construtor recebe "true" e na hora da exclusão é transformado para "false", porém estou usando o banco de dados PostgreSQL e ele não está convertendo para 0 ou 1, e está dando o seguinte erro:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Meu Construtor:

 public Medico(DadosCadastroMedico dados) {
        this.ativo = true;
        this.nome = dados.nome();
        this.email = dados.email();
        this.telefone = dados.telefone();
        this.crm = dados.crm();
        this.especialidade = dados.especialidade();
        this.endereco = new Endereco(dados.endereco());
    }

Método de exclusão:

@DeleteMapping("/{id}")
    @Transactional
    public void excluir(@PathVariable Long id) {
        var medico = repository.getReferenceById(id);
        medico.excluir();
    }

Método de troca do ativo:

public void excluir() {
        this.ativo = false;
    }

Existe alguma anotação para resolver este problema, ou alguma outra forma?

2 respostas
solução!

Oi!

O curso foi desenvolvido se baseando no MySQL como banco de dados. Para usar outro banco de dados você deve adaptar o código para lidar com as diferenças dele.

No caso do Postgres ele tem um tipo de dado boolean, então você poderia declarar a coluna como sendo desse tipo, ao invés do tipo tinyint que foi demonstrado no curso para o MySQL:

alter table medicos add ativo boolean;

Obs: A recomendação agora é criar uma nova migration para realizar a alteração do tipo da coluna:

alter table medicos alter column ativo type boolean;

Só não sei se vai dar problema no postgres para realizar essa mudança e talvez seja necessário apagar a coluna e criar novamente:

alter table medicos drop column ativo;
alter table medicos add ativo boolean;

Obrigado, eu tinha chego a essa mesma conclusão. Realmente precisei apagar a tabela para passar o tipo para