Hibernate join без связи между сущностями

 
0
 
Java
ava
XEugene | 25.01.2013, 13:11

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

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

Kommentare (5)
ava
mbasil | 25.01.2013, 12:29 #

for( Object o : result ) {
  if( o instanceof Ship ) {
      Ship s = (Ship)o;
      // делаем что-то с s
  } else if( o instanceof Clazz )
      Clazz cls = (Clazz)o;
      // делаем что-то с cls
  }
}
ava
XEugene | 25.01.2013, 13:08 #
Object тут не может быть instanceof Ship или instanceof Clazz.  Он содержит пары Ship и Clazz.  Я не знаю, как они там представлены. Очевидно, в виде какого-то прокси. В дебаггере они выглядят как элементы массива.
ava
mbasil | 26.01.2013, 13:23 #
Ну и посмотрите через reflection, что в элементе списка
ava
mbasil | 26.01.2013, 13:55 #
Примерно так

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;
    }
}
ava
XEugene | 27.01.2013, 10:35 #
А, так там не Object-ы, а массивы Object-ов. Спасибо.  
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
  XEugene   mbasil
advanced
Absenden