Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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.info.model.User_Java_Hibernate_Hql - Fatal编程技术网

休眠:线程中的异常;“主要”;java.lang.ClassCastException:[Ljava.lang.Object;无法强制转换为com.info.model.User

休眠:线程中的异常;“主要”;java.lang.ClassCastException:[Ljava.lang.Object;无法强制转换为com.info.model.User,java,hibernate,hql,Java,Hibernate,Hql,我只想使用HQL显示用户表中的两列。 我有一个User类和Main类,只显示列name和id 下面给出了用户类(我没有在这里编写构造函数和setter、getter) 主类是这样的:- public class Main { public static void main(String[] args) { SessionFactory sessionFactory =new Configuration().

我只想使用HQL显示用户表中的两列。 我有一个User类和Main类,只显示列name和id

下面给出了用户类(我没有在这里编写构造函数和setter、getter)

主类是这样的:-

public class Main
{
  public static void main(String[] args)
  {

    SessionFactory sessionFactory =new Configuration().
                                   configure().buildSessionFactory();
    Session session=sessionFactory.openSession();

    session.beginTransaction();
   Query query=session.createQuery("select name,id from User");
    List<User> users=query.list();
        for(User user: users)
        {
            System.out.println(user.getId()+" : "+user.getName());
        }
                session.getTransaction().commit();
    }
}
公共类主
{
公共静态void main(字符串[]args)
{
SessionFactory SessionFactory=新配置()。
configure().buildSessionFactory();
Session Session=sessionFactory.openSession();
session.beginTransaction();
Query=session.createQuery(“从用户中选择名称、id”);
List users=query.List();
for(用户:用户)
{
System.out.println(user.getId()+“:”+user.getName());
}
session.getTransaction().commit();
}
}
但它显示出以下例外:-

线程“main”java.lang.ClassCastException中的异常: [Ljava.lang.Object;无法转换为位于的com.info.model.User main.com.info.main.main(main.java:43)


注意:-我已经创建了表用户表。此程序仅用于显示信息。

我认为问题在于您显式选择列,导致Hibernate无法将结果映射到
用户对象

这应该起作用:

Query query=session.createQuery("from User");
List<User> users=query.list();

Query Query=session.createQuery(“来自用户”);
List users=query.List();
试试这个

List<User> users=(User)query.list();
List users=(User)query.List();

如果您在hql中使用投影,请使用别名。将您的查询更改为此,它应该可以工作

 Query query=session.createQuery("select usr.name,usr.id from User usr");

谢谢大家!我已经找到了问题的答案

是这样的:

Query query = session.createQuery("select name,id from User");
List<Object> details = query.list();

for(Object detail : details)
{
    Object[] items = (Object[])detail;
            System.out.println(items[0]+"  "+items[1]);
}
Query Query=session.createQuery(“从用户选择名称、id”);
List details=query.List();
用于(对象详细信息:详细信息)
{
对象[]项=(对象[])详细信息;
System.out.println(项[0]+“”+项[1]);
}
它将只显示两列,而不是三列


此过程的主要优点是,如果有一个包含1000列的大表,并且我们希望检索大约10列,那么我们应该使用此过程。

检查“查询”返回的对象类型它可能不是用户对象。@ks gujjarYeah,它将返回对象类型的值。我如何使用对象类存储和显示它?执行该操作的代码是什么?另请参阅尝试将数组中的每个元素类型转换为字符串@KSGUJJARYEAH。您给出的解决方案,它将显示所有列,但我不想显示所有列,我想显示只有两列“name”和“id”。因此,我编写的查询是正确的,但在存储“query.list()”的返回类型时存在错误'方法。@ksgujjar如果您使用自己的查询,则hibernate将不会将其与实体匹配-请参阅我的链接above@ScaryWombat它不是我的查询,它是hibernate指定的查询。
query query=session.createQuery(“从用户选择名称、id”)
是您的query@ksgujjar请仔细阅读。如果您想要自己的查询,则hibernate无法将它们映射到实体。您可以编写自己的查询(正如您已经做的那样),但hibernate无法将这些查询映射到实体,列将映射到对象数组。对不起,先生,您的回答是错误的,因为“query.list”()'方法始终返回无法强制转换为用户类型的对象列表。包含1000列的用户表-您被触发
Query query = session.createQuery("select name,id from User");
List<Object> details = query.list();

for(Object detail : details)
{
    Object[] items = (Object[])detail;
            System.out.println(items[0]+"  "+items[1]);
}