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

Erro no teste

https://github.com/Pedroo13/med.voll

estou recebdo um erro no teste Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended Hibernate: select nextval('medico_id_seq') Hibernate: insert into medico (crm,email,bairro,cep,cidade,complemento,logradouro,numero,uf,especialidade,nome,telefone,id) values (?,?,?,?,?,?,?,?,?,?,?,?,?) 2024-06-18T15:19:35.200-03:00 WARN 3976 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 22001 2024-06-18T15:19:35.200-03:00 ERROR 3976 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: value too long for type character varying(6)

org.hibernate.exception.DataException: could not execute statement [ERROR: value too long for type character varying(6)] [insert into medico (crm,email,bairro,cep,cidade,complemento,logradouro,numero,uf,especialidade,nome,telefone,id) values (?,?,?,?,?,?,?,?,?,?,?,?,?)]

não entendi muito bem, poderia me ajudar?

7 respostas
solução!

Oi!

O problema está nesse seu método da classe de testes:

private DadosCadastroMedico dadosMedico(String nome, String email, String crm, Especialidade especialidade) {
    return new DadosCadastroMedico(
            nome,
            email,
            "61999999999",
            crm,
            especialidade,
            dadosEndereco()
    );
}

Você está criando um objeto DadosCadastroMedico mas passando as informações na ordem errada. Confira no record DadosCadastroMedico a ordem dos atributos.

Eu corrigi aqui, mas agora esta retornando o seguinte erro

ava HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended Hibernate: select nextval('medico_id_seq') Hibernate: insert into medico (crm,email,bairro,cep,cidade,complemento,logradouro,numero,uf,especialidade,nome,telefone,id) values (?,?,?,?,?,?,?,?,?,?,?,?,?) Hibernate: insert into paciente (cpf,email,bairro,cep,cidade,complemento,logradouro,numero,uf,nome,telefone) values (?,?,?,?,?,?,?,?,?,?,?) Hibernate: insert into consultas (data,medico_id,motivo_cancelamento,paciente_id) values (?,?,?,?) 2024-06-18T16:51:26.240-03:00 WARN 10772 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 42703 2024-06-18T16:51:26.240-03:00 ERROR 10772 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: column "motivo_cancelamento" of relation "consultas" does not exist Posição: 39

org.hibernate.exception.SQLGrammarException: could not execute statement [ERROR: column "motivo_cancelamento" of relation "consultas" does not exist Posição: 39] [insert into consultas (data,medico_id,motivo_cancelamento,paciente_id) values (?,?,?,?)]

Está faltando a coluna motivo_cancelamento na sua tabela consultas. Você não declarou essa coluna na sua migration de criação da tabela, então precisa criar uma nova migration para definir essa coluna.

desculpa mas apareceu mais um erro kkkkk, em relação ao migration estava certo eu jã cirei aqui mas agora está dando este erro

Hibernate: select nextval('medico_id_seq') Hibernate: insert into medico (crm,email,bairro,cep,cidade,complemento,logradouro,numero,uf,especialidade,nome,telefone,id) values (?,?,?,?,?,?,?,?,?,?,?,?,?) Hibernate: insert into paciente (cpf,email,bairro,cep,cidade,complemento,logradouro,numero,uf,nome,telefone) values (?,?,?,?,?,?,?,?,?,?,?) Hibernate: insert into consultas (data,medico_id,motivo_cancelamento,paciente_id) values (?,?,?,?) Hibernate: select m1_0.id,m1_0.crm,m1_0.email,m1_0.bairro,m1_0.cep,m1_0.cidade,m1_0.complemento,m1_0.logradouro,m1_0.numero,m1_0.uf,m1_0.especialidade,m1_0.nome,m1_0.telefone from medico m1_0 where m1_0.especialidade=? and m1_0.id not in (select c1_0.medico_id from consultas c1_0 where c1_0.data=?) order by rand() fetch first 1 rows only 2024-06-18T17:08:47.356-03:00 WARN 9472 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 42883 2024-06-18T17:08:47.356-03:00 ERROR 9472 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: function rand() does not exist Dica: No function matches the given name and argument types. You might need to add explicit type casts. Posição: 301

Na interface MedicoRepository tem uma consulta JPQL que utiliza a função rand() do MySQL, mas no seu projeto você está utilizando o Postgres, então precisa verificar se existe uma função equivalente nele para substituir.

Muito obrigado por toda a ajuda, ajustei a query, e agora o teste passou

antes a linha com o rand() estava assim order by rand()

após a alteração para postgres ficou assim order by function('random')

Show! ;)