错误:java.lang.ClassCastException

编程入门 行业动态 更新时间:2024-10-27 20:30:43
本文介绍了错误: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(){ formmit(); 登录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() { formmit(); 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

本文发布于:2023-10-31 05:19:38,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:错误   java   ClassCastException   lang

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!