Hibernate:线程中的异常" main" java.lang.ClassCastException:[Ljava.lang.Object;无法转换为com.info.model.User

时间:2017-01-19 04:45:02

标签: java hibernate hql

我想在User Table Using HQL中只显示两列。  我有一个User类和Main Class来显示列名和id。

User类在下面给出。(我没有在这里编写构造函数和setter,getters。)

 @Entity
 public class User
 {
      private String name;
      @Id
      private int id;
      private String password;

     /* Constuctors, setters and getters*/
  }

主要课程是这样的: -

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();
    }
}

但它显示以下异常: -

  

线程中的异常&#34; main&#34; java.lang.ClassCastException:   [Ljava.lang.Object;无法转发到com.info.model.User at   com.info.main.Main.main(Main.java:43)

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

4 个答案:

答案 0 :(得分:1)

我认为问题在于您明确选择列,导致Hibernate不将结果映射到User个对象。

这应该有效:

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

答案 1 :(得分:-1)

试试这个

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

答案 2 :(得分:-1)

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

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

答案 3 :(得分:-2)

谢谢你们!我找到了解决问题的方法。

就像这样:

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

它只显示两列而不是三列。

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