0

我在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

4 回答 4

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

但是您可能应该使用调试器,而不是用这样的循环使您的代码混乱。

于 2012-05-18T15:31:50.877 回答
0

每当您尝试打印任何对象引用时,都会调用它的 toString() 方法。现在,假设您的 userList 是 User 类型。您尚未在 User 类中覆盖 toString() 方法。所以,目前发生的事情是调用对象类的 toString() 方法。对象类已经实现了这个方法,它打印出它的完全限定的包名和它的哈希码。

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

于 2012-05-18T20:02:01.970 回答
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);
}
于 2012-05-22T21:02:57.757 回答
0

在 Java 中,良好的编程习惯是重写Object.toString(),这样就可以避免这个问题。如果您想要比所获得的更有意义的输出,那么请遵守 API 鼓励的标准。如有疑问,请参阅文档

于 2012-05-19T11:11:26.463 回答