错误:java.lang.ClassCastException
更新整个帖子错误:java.lang.ClassCastException,java,hibernate,spring,Java,Hibernate,Spring,更新整个帖子 public Login authenticate(Login login) { String query = "SELECT 1 FROM Login AS l WHERE l.email=? AND l.password=?"; Object[] parameters = { login.getEmail(), login.getPassword() }; List resultsList = getHibernateTempla
public Login authenticate(Login login) {
String query = "SELECT 1 FROM Login AS l WHERE l.email=? AND l.password=?";
Object[] parameters = { login.getEmail(), login.getPassword() };
List resultsList = getHibernateTemplate().find(query,parameters);
if ( resultsList.size() == 1 ) {
results = (Login)resultsList.get(0);
System.out.println(results);
} else {
System.out.println("Error dude.... ");
// error no entity or mutiple entities
}
return results;
}
我现在返回登录对象
private void checkLogin() {
form.commit();
Login newUser = new Login();
newUser = ilogin.authenticate(loginbean);
System.out.println("Its Null Value" + newUser);
if (newUser == null) {
getWindow().showNotification("Login failed", LOGIN_ERROR_MSG,
Notification.TYPE_WARNING_MESSAGE);
} else {
System.out.println(newUser);
getApplication().setUser(newUser);
}
}
当没有匹配的电子邮件时,我发现没有这样的用户,并且这个声明也会被打印出来System.out.println(“其空值”+newUser)代码>
但当存在电子邮件和密码匹配时。我犯了一个奇怪的错误
原因:java.lang.ClassCastException:
无法将java.lang.Integer强制转换为
com.intermedix.domain.Login
位于com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:507)
在com.vaadin.event.EventRouter.firevent(EventRouter.java:161)上
位于com.vaadin.ui.AbstractComponent.fireEvent(AbstractComponent.java:1154)
位于com.vaadin.ui.Button.fireClick(Button.java:371)
位于com.vaadin.ui.Button.changeVariables(Button.java:193)
位于com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariables(AbstractCommunicationManager.java:1094)
在com.vaadin.terminal.gwt.server.AbstractCommunicationManager.dohandleuidRequest(AbstractCommunicationManager.java:590)上
在com.vaadin.terminal.gwt.server.CommunicationManager.handleuidRequest上(CommunicationManager.java:266)
位于com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:476)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
位于org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
位于org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
位于org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
位于org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
位于org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
位于org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
位于org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
位于org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
位于org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
位于org.mortbay.jetty.Server.handle(Server.java:326)
位于org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
位于org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:943)
位于org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
位于org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
位于org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
位于org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
位于org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
原因:
java.lang.ClassCastException:
无法将java.lang.Integer强制转换为
com.intermedix.domain.Login
位于com.intermedix.services.LoginService.authenticate(LoginService.java:31)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机
(方法)
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:301)
位于org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
位于org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:149)
位于org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
位于org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:171)
位于org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
在$Proxy32处。验证(未知源)
位于com.intermedix.ui.LoginDailog.checkLogin(LoginDailog.java:106)
位于com.intermedix.ui.LoginDailog.access$0(LoginDailog.java:102)
点击com.intermedix.ui.LoginDailog$1.button(LoginDailog.java:52)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机
(方法)
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:487)
... 26多
更新
我的登录bean类
package com.intermedix.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="users")
public class Login {
public Login(){}
private Long id = null;
private String email;
private String password;
public Login(String email, String password)
{
this.email = email;
this.password = password;
}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
而且我也根据查询进行了更新。当您执行以下查询时
选择email,id FROM Login,其中email=?密码=
您要求Hibernate从Login
实体中为您提供特定属性email
和id
。然后Hibernate将以数组列表的形式向您提供结果,每个列表项表示[email,id]
数组
如果您只想查询所有符合条件的登录
实体,请执行以下操作:
来自登录,其中电子邮件=?密码=
然后,结果列表将包含Login
对象
但至于你为什么尝试转换到LoginService
,我一点也不知道。您混淆了许多不同的Hibernate概念,并试图将它们混合在一起
我并不是说听起来没有帮助,但我认为您确实需要正确阅读Hibernate文档,更好地掌握您正在做的事情。尝试替换以下内容:
return (LoginService) results.get(0);
为此:
return (Login) results.get(0);
假设Login
是一个正确映射的hibernate实体,它应该可以工作
游寿
String query = "SELECT 1 FROM Login AS l WHERE l.email=? AND l.password=?";
String query = "SELECT login FROM Login AS login WHERE login.email=? AND login.password=?";
List results = createQuery(
"SELECT l FROM login AS l WHERE l.email=:email AND l.password=:password")
.setParameter("email",login.getEmail())
.setParameter("password",login.getPassword()).list();
if (results.isEmpty()) {
//.. login failed
} else if (result.size() > 1) {
throw new SomethingWrongException();
} else {
Login login = (Login) results.get(0);
}
String query = "SELECT l FROM Login AS l WHERE l.email=? AND l.password=?";