Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate join без связи между сущностями, как извлечь результат? 
V
    Опции темы
XEugene
Дата 25.1.2013, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 1.1.2008

Репутация: 1
Всего: 2



Код

List result = template.find("from Ship as ship, Clazz as clazz where ship.shipClass = clazz.id");
C Hibernate работаю через спринговский HibernateTemplate.

В дебаггере видно, что запрос вернул список Object-ов, содержащих пары Ship и Clazz. 
Как мне теперь извлечь эти Ship и Clazz? 


PM MAIL   Вверх
mbasil
Дата 25.1.2013, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 9
Всего: 13



Код

for( Object o : result ) {
  if( o instanceof Ship ) {
      Ship s = (Ship)o;
      // делаем что-то с s
  } else if( o instanceof Clazz )
      Clazz cls = (Clazz)o;
      // делаем что-то с cls
  }
}

PM MAIL   Вверх
XEugene
Дата 25.1.2013, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 1.1.2008

Репутация: 1
Всего: 2



Object тут не может быть instanceof Ship или instanceof Clazz.  Он содержит пары Ship и Clazz.  Я не знаю, как они там представлены. Очевидно, в виде какого-то прокси. В дебаггере они выглядят как элементы массива.
PM MAIL   Вверх
mbasil
Дата 26.1.2013, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 9
Всего: 13



Ну и посмотрите через reflection, что в элементе списка
PM MAIL   Вверх
mbasil
Дата 26.1.2013, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 9
Всего: 13



Примерно так
Код

import java.lang.reflect.*;
import java.lang.annotation.Annotation;
import java.io.Serializable;

public  class TestReflect {

   class Author implements Serializable {
      private long auId;
      private String lastName;
      public Author( int p_id, String p_lastName ) {
         auId = p_id;
         lastName  = p_lastName;
      }
      public long getAuId() {
        return auId;
      }
      public void setAuId( long p_auId ) {
        auId = p_auId;
      }
      public String getLastName() {
        return lastName;
      }
      public void setLastName( String p_lastName ) {
        lastName = p_lastName;
      }
    }
    //=======================================
    public static void main(String[] args) {
        TestReflect t = new TestReflect();
        t.checkAuthor();
    }
    private void checkAuthor() {

        Author[] arr = { new Author(1,"Mangless"),
                         new Author(2,"Scott")
                        };           
        Class clazz = arr[0].getClass();
        // выводим название пакета
        Package p = clazz.getPackage();
        if( p != null ) {
           System.out.println("package " + p.getName() + ";");
        } else {
           System.out.println("package default !");
        }
        // начинаем декларацию класса с модификаторов
        int modifiers = clazz.getModifiers();
        System.out.print(getModifiers(modifiers));
        // выводим название класса
        System.out.print("class " + clazz.getSimpleName() + " ");

        // выводим название родительского класса
        System.out.print("extends " + clazz.getSuperclass().getSimpleName() + " ");

        // выводим интерфейсы, которые реализует класс
        Class[] interfaces = clazz.getInterfaces();
        for (int i = 0, size = interfaces.length; i < size; i++) {
            System.out.print(i == 0 ? "implements " : ", ");
            System.out.print(interfaces[i].getSimpleName());
        }
        System.out.println(" {");
        // выводим поля класса
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            System.out.println("\t" + getModifiers(field.getModifiers())
                    + getType(field.getType()) + " " + field.getName() + ";");
        }
        System.out.println("}");
    }

    private String getModifiers(int m) {
        String modifiers = "";
        if (Modifier.isPublic(m)) modifiers += "public ";
        if (Modifier.isProtected(m)) modifiers += "protected ";
        if (Modifier.isPrivate(m)) modifiers += "private ";
        if (Modifier.isStatic(m)) modifiers += "static ";
        if (Modifier.isAbstract(m)) modifiers += "abstract ";
        return modifiers;
    }
    private String getType(Class clazz) {
        String type = clazz.isArray()
                ? clazz.getComponentType().getSimpleName()
                : clazz.getSimpleName();
        if (clazz.isArray()) type += "[]";
        return type;
    }
}

PM MAIL   Вверх
XEugene
Дата 27.1.2013, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 1.1.2008

Репутация: 1
Всего: 2



А, так там не Object-ы, а массивы Object-ов. Спасибо.  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0434 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.