我在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
答案 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);
}