我想在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)
注意: - 我已经创建了表用户表。该程序仅用于显示信息。
答案 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列,那么我们应该使用这个过程。