2012-05-18 4 views
0

У меня есть следующий код на Яве:Отображение содержимого объекта в запросе результат

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

всякий раз, когда вы пытаетесь распечатать ссылку на объект, вызывается метод toString(). Теперь предположим, что ваш userList имеет тип User. Вы не переопределили метод toString() в своем классе User. Итак, в настоящее время происходит метод toString() класса объекта. Класс Object реализовал этот метод таким образом, что он печатает его полностью квалифицированное имя пакета, и это hashcode.

Итак, просто переопределите этот метод toString() в вашем классе User и начните печатать целые данные, как вы настроили в этом методе. Вы можете вручную переопределить этот метод, или если у вас есть netbeans линии IDE или затмение, просто щелкните правой кнопкой мыши в любом месте java-файла и выберите метод ToString.

+0

проблема в моем случае заключается в том, что я пытаюсь отобразить результат SQL-запроса, который представляет собой комбинацию двух разных таблиц. Таким образом, SQL-запрос возвращает результат с комбинацией столбцов из двух разных таблиц. Именно по этой причине я не могу использовать метод toString() для конкретного класса, потому что у меня есть поля из двух разных таблиц. Для вашей информации я использую hibernate persistence – Alok

+0

Хорошо ... Но каков тип вашего объекта userlist? У вас должен быть объект спящего режима, отображаемый для типа этого списка, не так ли? –

+0

Я понял проблему. Я не знал, что результат запроса, соединяющего более чем одну таблицу, сохранит результат как массив класса объектов. – Alok

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

Но вы, вероятно, следует использовать отладчик вместо загромождать код с такими петлями.

+0

Вы также можете написать метод, который делает то же самое и не вводит никаких помех. – jahroy

0

В Java хорошая практика программирования заключается в переопределении Object.toString() Чтобы избежать этой проблемы. Если вы хотите получить более значимый результат, то что вы получаете, а затем придерживайтесь стандартов, которые поощряются API. refer to the documentation when in doubt

+0

Как он должен переопределить toString для массива? –

+0

Прошу прощения, но кто сказал, что ОП извлекает массив? Я предположил, что в 20012 году мы не используем массивы. Независимо от прошлого или настоящего, в почти любом начинающем учебнике говорится о переопределении 'Java.lang.Object.toDtring()' – thejartender

+0

Он сказал это ... '[Ljava.lang.Object; @ 64bef361' –

0

Я понял, что проблема. Я не знал, что результат запроса, соединяющего более чем одну таблицу, сохранит результат как массив класса объектов.

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); 
} 
+0

Не имеет ничего общего с присоединением. Это связано с тем, что вы попросили «скалярный» результат (выберите u.userId, u.username, p.profileContent). –

Смежные вопросы