Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.ClassCastException:[Ljava.lang.Object;无法强制转换为com.xl.entity.Users_Java_Hibernate_Hql - Fatal编程技术网

java.lang.ClassCastException:[Ljava.lang.Object;无法强制转换为com.xl.entity.Users

java.lang.ClassCastException:[Ljava.lang.Object;无法强制转换为com.xl.entity.Users,java,hibernate,hql,Java,Hibernate,Hql,代码如下: 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.se

代码如下:

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;
    }
错误:

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)

(翻译由Google Translate提供)

您可以为
用户创建另一个构造函数作为
公共用户(字符串名称、字符串密码)
并将查询更改为

String hql="select new yourpath.Users(user.name,user.password) from Users user
where user.name=:name";

您可以为
用户
创建另一个构造函数作为
公共用户(字符串名称、字符串密码)
并将查询更改为

String hql="select new yourpath.Users(user.name,user.password) from Users user
where user.name=:name";
由于
query.list()
返回
list
,并且您正在将列表的内容强制转换为type
User
,现在,由于异常情况,无法将
对象强制转换为User
。请确保您是以User的形式获取内容的

您可以进行检查:

 if(query.list() instanceOf User){
        // can cast to user.
 }else{
        // can not cast to User.
 }
由于
query.list()
返回
list
,并且您正在将列表的内容强制转换为type
User
,现在,由于异常情况,无法将
对象强制转换为User
。请确保您是以User的形式获取内容的

您可以进行检查:

 if(query.list() instanceOf User){
        // can cast to user.
 }else{
        // can not cast to User.
 }
您需要以这种方式备份根实体

Query query = session.createQuery(hql);
query.setResultTransformer(RootEntityResultTransformer.INSTANCE);
query.list()
使用投影(选择列表)将生成
Object[]
类型的结果:
ResultTransformer
将创建
User
对象,并映射原始
Object[]
以更正
User
的属性

您需要以这种方式备份根实体

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

使用投影(选择列表)将生成
Object[]
类型的结果:
ResultTransformer
将创建一个
User
对象,并映射原始
Object[]
以更正
用户的属性如果需要Users对象,请将查询编辑为

String hql="from Users user where user.name=:name";
否则,结果将是一个对象数组,因此您需要使用转换器或将其简单地强制转换为对象[]:

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];

如果需要Users对象,请将查询编辑为

String hql="from Users user where user.name=:name";
否则,结果将是一个对象数组,因此您需要使用转换器或将其简单地强制转换为对象[]:

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];

选择<代码> HiBiNe./COD> TAG是一个很好的问题吗?你可能想考虑页面上的一些例子来说明你的问题中包含什么。欢迎SO.it选择<代码> HiBiNET标签ALSOWHAT是个问题。你可能会考虑在页面上查看一些包含哪些内容的例子。在您的问题中。欢迎这么做。无需这样做,hql应该只是固定的或返回不同的数据类型。无需这样做,hql应该只是固定的或返回不同的数据类型。