[RESOLVIDO] Como criar novas NamedQueries?

10 respostas
R

Tenho as seguintes NamedQueries (entre outras) na minha classe Usuario.

@NamedQueries({ @NamedQuery(name = "Usuario.findAll", query = "SELECT u FROM Usuario u"), @NamedQuery(name = "Usuario.findByLoginUsu", query = "SELECT u FROM Usuario u WHERE u.loginUsu = :loginUsu"), @NamedQuery(name = "Usuario.findBySenhaUsu", query = "SELECT u FROM Usuario u WHERE u.senhaUsu = :senhaUsu"), })

Gostaria de inserir mais uma que fizesse a validação via MD5 da senha do usuario. Em minha concepção seria ficaria assim:

@NamedQueries({ @NamedQuery(name = "Usuario.loginESenhaMD5", query = "SELECT u FROM Usuario u WHERE u.loginUsu = :loginUsu AND u.senhaUsu = MD5(':senhaUsu')"), @NamedQuery(name = "Usuario.findAll", query = "SELECT u FROM Usuario u"), @NamedQuery(name = "Usuario.findByLoginUsu", query = "SELECT u FROM Usuario u WHERE u.loginUsu = :loginUsu"), @NamedQuery(name = "Usuario.findBySenhaUsu", query = "SELECT u FROM Usuario u WHERE u.senhaUsu = :senhaUsu"), })

Mas ao modificar qualquer dado dentro das Aspas ele retorna erro e a entidade da erro ao ser criada. Dentro da classe ele da erro de MD5:

Usuario.loginESenhaMD5[70;73]: The identification variable 'MD5' is not defined in the FROM clause.

se eu deixar assim: ele funciona normalmente

@NamedQueries({ @NamedQuery(name = "Usuario.loginESenhaMD5", query = "SELECT u FROM Usuario u WHERE u.loginUsu = :loginUsu"), @NamedQuery(name = "Usuario.findAll", query = "SELECT u FROM Usuario u"), @NamedQuery(name = "Usuario.findByLoginUsu", query = "SELECT u FROM Usuario u WHERE u.loginUsu = :loginUsu"), @NamedQuery(name = "Usuario.findBySenhaUsu", query = "SELECT u FROM Usuario u WHERE u.senhaUsu = :senhaUsu"), })

Alguém pode me indicar como criar novas NamedQueries?

10 Respostas

R

Ninguem?

Preciso colocar uma checagem MD5 dentro da query ali, alguem ajuda?

freakazoid

O MD5 não existe para ser referenciado, por isso a exception.
Tente alguma coisa +/- assim:

@NamedQuery(name = "Usuario.loginESenhaMD5", query = "SELECT u FROM Usuario u WHERE u.loginUsu = :loginUsu AND u.senhaUsu = :=md5")
Usuario usuario = em.createNamedQuery("Usuario.loginESenhaMD5")
   .setParameter("MD5", md5);

Abs!

R

Mas ele não será referenciado mesmo. MD5 é uma função do MySQL
preciso passar para o banco de dados processar.

freakazoid

rcmatias:
Mas ele não será referenciado mesmo. MD5 é uma função do MySQL
preciso passar para o banco de dados processar.

Verdade cara!

Não tenho certeza, mas acho que não é possível chamar uma function usando @NamedQuery. Vc vai precisar usar @NamedNativeQuery.

Abs!

R

freakazoid:

Não tenho certeza, mas acho que não é possível chamar uma function usando @NamedQuery. Vc vai precisar usar @NamedNativeQuery.

Abs!

Beleza, se tem outra função vou pesquisar sobre…

Vou verificar aqui.

abs

R

freakazoid:

Verdade cara!

Não tenho certeza, mas acho que não é possível chamar uma function usando @NamedQuery. Vc vai precisar usar @NamedNativeQuery.

Abs!

Não achei nada ainda sobre como implementar o namednativequery, sou iniciante java e to meio perdido. Será que alguem teria algum link com material?

freakazoid

http://www.java2s.com/Code/Java/JPA/UsingNamedNativeQuery.htm

http://www.codemiles.com/jpa/named-native-query-t6203.html

javaflex

Cara se for possível não faça essas gambiarras, usa mapeamento por XML (sei que é chato, mas é a única alternativa decente do Hibernate pra Java). Deixe o SQL longe das suas entidades. Exemplo: http://docs.jboss.org/hibernate/orm/3.3/reference/pt-BR/html/querysql.html#querysql-namedqueries Mas se não for possível siga o exemplo que o freakazoid passou.

A

Ao invés de usar o uma query para checar a sua MD5, utilize um algoritmo para checar a sua md5 que esta no banco e com a md5 gerada no password que o usuario digitou.

R

Fiz exatamente o que o andrielc disse…

Mas vou precisar de novas namedqueries ou então terei que ficar criando com createquery, mas tudo bem.

Vou pesquisar aqui, marcando o tópico como resolvido.

Criado 14 de maio de 2013
Ultima resposta 27 de mai. de 2013
Respostas 10
Participantes 4