1
resposta

Erro em query

Estou tentando criar uma query onde envolve uma tabela de quebra. Funciona assim, tenho um profissional onde informo os dias da semana que ele irá trabalhar. Então quero verificar se o dia informado pela pessoa que esta realizando o agendamento para ele, é um dia de trabalho do profissional.

Para isso eu fiz o meu rpository da seguinte forma:

 @Query("""
            Select d.dias_da_semana
             from Profissional p, profissional_dias_da_semana d
             where p.id = d.profissional_id
             and d.profissional_id = :id     
            """)
    List<Profissional> findByIdDiasSemana(Long id);

A tabela profissional_dias_da_semana é uma quebra onde pego os dias da semana por profissional

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

Na minha classe profissional esta da seguinte forma:

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

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "id_pessoa")
    private Pessoa id_pessoa;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "id_profissao")
    private Profissao id_profissao;

    @ElementCollection(targetClass = DiasDaSemana.class)
    @Enumerated(EnumType.STRING)
    private List<DiasDaSemana> dias_da_semana;

    private String carteira_profissional;
    private String observacao;
    private Boolean status;
    private LocalDateTime data_admissao;
    private LocalDateTime data_desligamento;

Por fim o meu enum com os dias da semana:

public enum DiasDaSemana {
    DOMINGO,
    SEGUNDA,
    TERÇA,
    QUARTA,
    QUINTA,
    SEXTA,
    SABADO
}

Ao iniciar o projeto estou recebendo esta exceção:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ValidadorDiaDaSemana': Unsatisfied dependency expressed through field 'profissionalRepository': Error creating bean with name 'profissionalRepository' defined in br.com.nsistemas.apiclinica.repository.ProfissionalRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract java.util.List br.com.nsistemas.apiclinica.repository.ProfissionalRepository.findByIdDiasSemana(java.lang.Long); Reason: Validation failed for query for method public abstract java.util.List br.com.nsistemas.apiclinica.repository.ProfissionalRepository.findByIdDiasSemana(java.lang.Long)

Existe uma forma mais simples para verificar se o dia esta disponível para o profissional?

1 resposta

Olá, Natali, tudo bem?

Desculpe pela demora em obter um retorno.

Primeiramente parabéns por ir além do curso e buscar praticar conhecimentos adquiridos através de outros projetos.

A exceção que você está recebendo, UnsatisfiedDependencyException, normalmente é lançada quando há algum problema com as dependências do Spring, como a injeção de dependência em algum componente.

A sua query busca os dias da semana disponíveis para um profissional específico. No entanto, a exceção indica que há um problema de validação na query. Isso pode estar relacionado à forma como a query está sendo construída ou à forma como os parâmetros estão sendo passados.

Uma sugestão para resolver esse problema é ajustar a sua query para que ela retorne diretamente a lista de dias da semana disponíveis para o profissional, em vez de tentar retornar uma lista de objetos Profissional. Dado que você está interessado apenas nos dias da semana, não há necessidade de buscar toda a entidade Profissional.

Algo como o código abaixo:

@Query("""
    Select d.dias_da_semana
    from Profissional p
    join p.dias_da_semana d
    where p.id = :id
""")
List<DiasDaSemana> findDiasSemanaById(Long id);

Nessa query, usamos a cláusula JOIN para acessar diretamente a lista de dias da semana da entidade Profissional.

Lembre-se de ajustar o código de acordo com a estrutura do seu projeto e realizar os testes necessários.

Espero ter ajudado.

Caso surja alguma dúvida, não hesite em compartilhar no fórum.

Abraços e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!