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

Problemas para retornar usuario por email

Tenho o seguinte metodo:

public Usuario getByEmail(String email) { Usuario usuario = manager.createQuery("select u from Usuario u where email = :email", Usuario.class).setParameter("email", email).getSingleResult(); return usuario; }

A consulta que ele produz eh:

select usuario0_.email as email1_3_, usuario0_.nome as nome2_3_, usuario0_.senha as senha3_3_ from Usuario usuario0_ where usuario0_.email=?

Quando eu executo a consulta direto no banco de dados (PostgreSQL) o registro eh retornado, porem no codigo nenhum registro eh retornado.

Sabem se esta faltando algo?

3 respostas

Olá Murilo,

Para realizar a busca nesse caso é preciso definir explicitamente que deseja fazer a busca a partir do e-mail do usuário:

"select u from Usuario u where u.email = :email"

Nesse caso faltou apenas o uso do alias que você definiu.

Eu realizei a alteracao, mas infelizmente, nao funcionou...

public Usuario getByEmail(String email) { return manager.createQuery("select u from Usuario u where u.email = :email", Usuario.class).setParameter("email", email).getSingleResult(); }

Eu desconfio que nao eh nada relacionado com a consulta em si, mas uma restricao pelo fato da classe implementar UserDetailsService, do spring security...

Estou fazendo diversas pesquisas nesse sentido, mas ainda sem sucesso.

solução!

Apos muita pesquisa consegui resovler o problema, o que acontecia era, o Spring tem uma limitacao quando voce utiliza o, s:mvcUrl, ele se perde (nao sei se o termo correto) nos pontos e como eu estava passando um e-mail na url o Spring sempre tirava o ultimo bloco a partir do ultimo ponto da String, para resolver isso, eu alterei a classe que estende WebMvcConfigurerAdapter, e sobrescrevi o metodo, configurePathMatch, a implementacao ficou assim:

@Override public void configurePathMatch(PathMatchConfigurer configurer) { configurer.setUseSuffixPatternMatch(false); }

Depois, eu testei novamente, e sucesso!!!