java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.xl.entity.Users

16,813

Solution 1

If you need the Users object, edit your query to be like

String hql="from Users user where user.name=:name";

Otherwise the result will be an array of objects so you need to either use a transformer or simply cast it to object[]:

String hql="select user.password from Users user where user.name=:name";
Query query = session.createQuery(hql);
query.setString("name", username);
Object[] result =(Object[]) query.list().get(0);
String password = result[0];

Solution 2

You need a ResultTransformer backed on root entity in this manner

Query query = session.createQuery(hql);
query.setResultTransformer(RootEntityResultTransformer.INSTANCE);
query.list()

Using a projection (the select list) will produce a result of Object[] type: the ResultTransformer will create a User object and maps raw Object[] to correct User's property

Solution 3

You can create another constructor for Users as public Users(String name, String password) and change query to

String hql="select new yourpath.Users(user.name,user.password) from Users user
where user.name=:name";
Share:
16,813
Admin
Author by

Admin

Updated on June 04, 2022

Comments

  • Admin
    Admin almost 2 years

    Here is the code:

    public Users login(String username) {
            Users user=null;
            try {
                String hql="select user.name,user.password from Users user where user.name=:name";
                Query query = session.createQuery(hql);
                query.setString("name", username);
                user=(Users) query.list().get(0);
            } catch (HibernateException e) {
                e.printStackTrace();
            }
            return user;
        }
    

    Error:

    java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.xl.entity.Users
        at com.xl.impl.HouseDaoImpl.login(HouseDaoImpl.java:51)
        at com.xl.biz.HouseBiz.login(HouseBiz.java:25)
        at com.xl.Servlet.UserServlet.doGet(UserServlet.java:25)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
    

    (Translations courtesy Google Translate)