错误:java.lang.ClassCastException [英] Error: java.lang.ClassCastException
问题描述
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()};
列出resultsList = getHibernateTemplate()。find(query,parameters);
if(resultsList.size()== 1){
results =(Login)resultsList.get(0);
System.out.println(results);
} else {
System.out.println(Error dude ....);
//错误没有实体或多个实体
}
返回结果;
}
我现在返回Login Objects。
private void checkLogin(){
form.commit();
登录newUser = new Login();
newUser = ilogin.authenticate(loginbean);
System.out.println(它的空值+ newUser);
if(newUser == null){
getWindow()。showNotification(Login failed,LOGIN_ERROR_MSG,
Notification.TYPE_WARNING_MESSAGE);
} else {
System.out.println(newUser);
getApplication()。setUser(newUser);
$ / code $ / pre
当没有匹配的电子邮件时,没有这样的用户,也没有打印出这个声明。 System.out.println(它的空值+ newUser);
但是当有电子邮件和密码匹配。我得到奇怪的错误。
原因:java.lang.ClassCastException:
java.lang.Integer不能转换为
com.intermedix .domain.Login $在com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:507)b
$ b。在com.vaadin.event.EventRouter.fireEvent(EventRouter.java:161)
在com.vaadin.ui.AbstractComponent.fireEvent(AbstractComponent.java:1154)
at com.vaadin.ui.Button.fireClick(Button.java:371)
at com.vaadin.ui.Button .changeVariables(Button.java:193)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariables(AbstractCommunicationManager.java:1094)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager .doHandleUidlRequest(AbstractCommunicationManager.java:590)
在com.vaadin.terminal.gwt.server.CommunicationManager.handleUidlRequest(CommunicationManager.java:266)
在com.vaadin.terminal.gwt.server.AbstractAppli在javax.servlet.http.HttpServlet.service cationServlet.service(AbstractApplicationServlet.java:476)
(HttpServlet.java:820)
在org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder。 Java的:511),美元,org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390 b $ b)
在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)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
at org.mortbay .jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at o rg.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection $在org.mortbay.jetty.HttpParser.parseNext RequestHandler.content(HttpConnection.java:943)
(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
at com.intermedix.services.LoginService.authenticate(LoginService.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method )$ su
n.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
在java.lang.reflect.Method.invoke(方法。的java:在org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:301 597)
)
。在org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
在在在$ Proxy32 org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
。 authe nticate(未知来源)
。在com.intermedix.ui.LoginDailog.checkLogin(LoginDailog.java:106)
。在com.intermedix.ui.LoginDailog.access $ 0(LoginDailog.java:102)
at com.intermedix.ui.LoginDailog $ 1.buttonClick(LoginDailog.java:52)
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 com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:487)
... 26 more
更新
我的Login 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(){} $ b $ private long id = null ;
私人字符串电子邮件;
私人字符串密码;
public Login(String email,String password)
{
this.email = email;
this.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;
$ b $ / code $ / pre
$ b $ p我也根据raplh查询。解决方案根据您的问题 org.hibernate.hql.ast.QuerySyntaxException ,我强烈假设Login是一个映射对象。
在这种情况下,如果以正确的方式使用Hibernate,则不需要手动执行查询结果和对象之间的映射:
已更正(我忘记了查询的AS l部分)
列表结果= createQuery(
SELECT l FROM login AS l WHERE l.email =:email AND l.password =:password)
.setParameter(email,login.getEmail())
.setParameter(password 。,login.getPassword())列表();
if(results.isEmpty()){
// .. login failed
} else if(result.size()> 1){
throw new SomethingWrongException() ;
} else {
登录登录=(Login)results.get(0);
}
Updating the entire post.
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;
}
I now return Login Objects.
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);
}
}
When there is no matching email, i get there is no such user and also this statement does get printed out. System.out.println("Its Null Value" + newUser);
But when there is a email and password matching. I get weird error.
Cause: java.lang.ClassCastException:
java.lang.Integer cannot be cast to
com.intermedix.domain.Login
at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:507)
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:161)
at com.vaadin.ui.AbstractComponent.fireEvent(AbstractComponent.java:1154)
at com.vaadin.ui.Button.fireClick(Button.java:371)
at com.vaadin.ui.Button.changeVariables(Button.java:193)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariables(AbstractCommunicationManager.java:1094)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.doHandleUidlRequest(AbstractCommunicationManager.java:590)
at com.vaadin.terminal.gwt.server.CommunicationManager.handleUidlRequest(CommunicationManager.java:266)
at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:476)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:943)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by:
java.lang.ClassCastException:
java.lang.Integer cannot be cast to
com.intermedix.domain.Login
at com.intermedix.services.LoginService.authenticate(LoginService.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 org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:301)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy32.authenticate(Unknown Source)
at com.intermedix.ui.LoginDailog.checkLogin(LoginDailog.java:106)
at com.intermedix.ui.LoginDailog.access$0(LoginDailog.java:102)
at com.intermedix.ui.LoginDailog$1.buttonClick(LoginDailog.java:52)
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 com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:487)
... 26 more
Updating
My Login bean class
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;
}
}
and also i updated according to raplh the query.
解决方案 According to your question org.hibernate.hql.ast.QuerySyntaxException, I strongly assume that Login is a mapped object.
In this case you do not need to do the mapping between the query result and the object by hand, if you use Hibernate in the correct way:
corrected (i have forgot the "AS l" part of the query)
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);
}
这篇关于错误:java.lang.ClassCastException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!