2012-06-12 2 views
-6

Как реализовать этот запрос в спящем режиме?как реализовать данные запроса в двух таблицах в спящем режиме?

select tab1.name from table1 tab1, table2 tab2 where table1.id = table2.id 
+0

Чтобы ответить на это, нам нужно увидеть объекты, которые отображают таблицы1 и таблицу2. – Pablo

+2

Что представляют собой объекты, сопоставляющие эти таблицы? Что вы пробовали? Что вы не понимаете в документации Hibernate? http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#queryhql-joins –

+0

Таблица 1 содержит столбцы id, code и table2 содержит id, name, repadd, repag. Мне нужно выбрать все данные из таблицы2, если они совпадают с идентификатором. –

ответ

1

Хорошее решение:

Существует связь между двумя таблицами. Это отношение одно к одному, от одного до многих, от многих до одного или от многих до многих. Создайте это отношение в своем сопоставлении. Если, например, table2 является дочерним элементом таблицы 1, то в классе table1 и сопоставлении вы создаете свойство с одним из указанных отношений, вы загружаете только таблицу1 с помощью инструкции HQL «из таблицы1» (с дополнительным условием where-condition; может указать внутреннее соединение между двумя таблицами), и вы получаете доступ к таблице2 с помощью table1.getTable2() (соотношение 1: 1 или n: 1) или table1.getTable2List() (соотношение 1: n или n: m).

Слоппи решение (но абсолютно нормально, если выбрать используется только в особых случаях):

ли в HQL select table1.col1, table1.col2, table2.col1 from table1 inner join table2 where ... и оценить список массивов объекта, или же сделать select new Tabble1Table2Pojo(table1.col1, table1.col2, table2.col1) from table1 inner join table2 where ... и оценить список Tabble1Table2Pojo.

+0

Спасибо, Джоанна. но у меня есть сомнения, как выглядят мои файлы hbm? Может ли u plz предоставить table1.hbm.xml и table2.hbm.xml фрагмент кода? –

+0

Посмотрите здесь: http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/associations.html есть также много примеров. – Johanna

1

Я думаю, это поможет вам.

Criteria criteria = session.createCriteria(table1.class); 
criteria.setFetchMode("table2", FetchMode.JOIN).add(Restrictions.eq("id", 2)); 
ProjectionList proList = Projections.projectionList(); 
proList.add(Projections.property("name"), name); 
criteria.setProjection(proList); 
List list = criteria.list(); 
1

Вы должны использовать проекцию апи как

Criteria criteria = session.createCriteria(table1.class); 
criteria.setFetchMode("table2", FetchMode.JOIN).add(Restrictions.eq("id", 2)); 
ProjectionList proList = Projections.projectionList(); 
proList.add(Projections.property("name"), name); 
criteria.setProjection(proList); 
List list = criteria.list(); 

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

+0

hey deepak, спасибо за ваш ответ. Но что abt мой table1.hbm.xml и table2.hbm.xml? я сохраняю какие-либо дополнительные конфигурации в файле table1.hbm.xml таблицы2.hbm.xml? –

+0

Точно, я не знаю, что у вас есть в hbm-файлах, но, я думаю, не нужно менять/добавлять какие-либо конфигурации в hbm-файлах. – Deepak

+0

Также, если вы обратитесь к решению Johanna, вам нужно изменить или добавить некоторые конфигурации в hbm-файлах. Я просто хочу сказать ... Есть много решений для вашего запроса в спящем режиме. – Deepak