Boa tarde, galera!
Estou estudando em cima da apostila caelum fj21, to com dificuldade aqui, se alguém puder dar uma força…
class LoginController:
@Resource
public class LoginController {
private UsuarioDAO usuarioDao;
private UsuarioLogado usuarioLogado;
private Result result;
public LoginController(UsuarioDAO usuarioDao, UsuarioLogado usuarioLogado, Result result) {
this.usuarioDao = usuarioDao;
this.usuarioLogado = usuarioLogado;
this.result = result;
}
public void autentica(Usuario usuario) {
Usuario autenticado = usuarioDao.buscaUsuarioPorLoginESenha(usuario);
if (autenticado != null) {
usuarioLogado.efetuaLogin(autenticado);
result.redirectTo(ProdutoController.class).lista();
return;
}
result.redirectTo(LoginController.class).formulario();
}
public void formulario() {
}
}
UsuarioDAO:
@Component
@RequestScoped
public class UsuarioDAO {
private Session session;
public UsuarioDAO() {
this.session = new HibernateUtil().getSession();
}
public Usuario buscaUsuarioPorLoginESenha(Usuario usuario) {
Query query = this.session.createQuery("from caelum.VRaptor.modelo.Usuario where login = :pLogin and senha = :pSenha");
query.setParameter("pLogin", usuario.getLogin());
query.setParameter("pSenha", usuario.getSenha());
return (Usuario) query.uniqueResult();
}
}
Usuario:
@Entity
@PersistenceContext
public class Usuario implements Serializable{
@Id
@GeneratedValue
@Column(name="id")
private int id;
@Column(name="nome")
private String nome;
@Column(name="login")
private String login;
@Column(name="senha")
private String senha;
public int getId() {
return id;
}
public String getLogin() {
return login;
}
public String getNome() {
return nome;
}
public String getSenha() {
return senha;
}
public void setId(int id) {
this.id = id;
}
public void setLogin(String login) {
this.login = login;
}
public void setNome(String nome) {
this.nome = nome;
}
public void setSenha(String senha) {
this.senha = senha;
}
}
Exception:
07/09/2010 13:57:29 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet default threw exception
br.com.caelum.vraptor.InterceptionException: an exception was raised while executing resource method
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:86)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:86)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:861)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1584)
at java.lang.Thread.run(Thread.java:619)
Caused by: org.hibernate.QueryParameterException: could not locate named parameter [pLogin]
at org.hibernate.engine.query.ParameterMetadata.getNamedParameterDescriptor(ParameterMetadata.java:101)
at org.hibernate.engine.query.ParameterMetadata.getNamedParameterExpectedType(ParameterMetadata.java:107)
at org.hibernate.impl.AbstractQueryImpl.determineType(AbstractQueryImpl.java:461)
at org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:431)
at caelum.VRaptor.dao.UsuarioDAO.buscaUsuarioPorLoginESenha(UsuarioDAO.java:21)
at caelum.VRaptor.controllers.LoginController.autentica(LoginController.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:57)
... 37 more
Peço desculpas ao moderador, se fiz algo errado, 1ª vez.
O problema está neste trecho, eu acho:
Query query = this.session.createQuery("from caelum.VRaptor.modelo.Usuario where login = :pLogin and senha = :pSenha");
query.setParameter("pLogin", usuario.getLogin());
Eu, infelizmente, ao contrário dos outros exercicios, não consegui encontrar uma solução para esse aqui! Minha dúvida é saber como fazer o setPatameter aceitar o dado que estou passando, no caso o pLogin.
Agradeço desde já.
Abraço!