在查询结果中显示对象的内容

时间:2012-05-18 15:27:02

标签: java hibernate

我在java中有以下代码:

    try {
        SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();
        session=sessionFactory.openSession();
        Query userQuery=session.createQuery("select u.userId, u.username,p.profileContent from User as u inner join u.profiles as p");//, p.profileContent 

        List userList=userQuery.list();
        for(int i=0;i<userList.size();i++){
            System.out.println(userList.get(i));
        }
    }
    catch(Exception e){
        System.out.println(e.getMessage());
    }
    finally{
        session.flush();
        session.close();
    }

我正在尝试显示查询结果,但只显示对象。你能告诉我显示对象内容的方法吗?目前我的结果如下:

  

[Ljava.lang.Object; @ 64bef361

4 个答案:

答案 0 :(得分:4)

for (Object o : userList) {
    Object[] row = (Object[]) o;
    System.out.println(Arrays.toString(row));
}

但你应该使用调试器而不是用这样的循环来混淆代码。

答案 1 :(得分:0)

每当你尝试打印任何对象引用时,都会调用toString()方法。现在,假设您的userList属于User类型。您没有在User类中重写toString()方法。因此,当前正在发生的事情是调用对象类的toString()方法。对象类已经实现了这种方法,它打印出它的完全限定包名和它的哈希码。

因此,只需在User类中覆盖此toString()方法,它就会像您在此方法中配置的那样开始打印整个数据。您可以手动覆盖此方法,或者如果您有IDE line netbeans或eclipse,只需右键单击java文件中的任意位置并选择生成ToString方法。

答案 2 :(得分:0)

在Java中,良好的编程习惯是覆盖Object.toString()以避免这个问题。如果您想要获得更有意义的输出,那么请遵守API所鼓励的标准。refer to the documentation when in doubt

答案 3 :(得分:0)

我弄明白了这个问题。我不知道连接多个表的查询结果会将结果存储为Objects类的数组。

Query userQuery=session.createQuery("select u.userId, u.username,p.profileContent from User as u inner join u.profiles as p");//, p.profileContent 

Iterator ite = userQuery.list().iterator();
while ( ite.hasNext() ) {    
    Object[] pair = (Object[]) ite.next();
    Integer user = (Integer) pair[0];
    String userName=(String) pair[1];
    String profileContent=(String) pair[2];

    System.out.println(user+" "+userName+" "+profileContent);
}