Как реализовать этот запрос в спящем режиме?как реализовать данные запроса в двух таблицах в спящем режиме?
select tab1.name from table1 tab1, table2 tab2 where table1.id = table2.id
Как реализовать этот запрос в спящем режиме?как реализовать данные запроса в двух таблицах в спящем режиме?
select tab1.name from table1 tab1, table2 tab2 where table1.id = table2.id
Хорошее решение:
Существует связь между двумя таблицами. Это отношение одно к одному, от одного до многих, от многих до одного или от многих до многих. Создайте это отношение в своем сопоставлении. Если, например, 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.
Спасибо, Джоанна. но у меня есть сомнения, как выглядят мои файлы hbm? Может ли u plz предоставить table1.hbm.xml и table2.hbm.xml фрагмент кода? –
Посмотрите здесь: http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/associations.html есть также много примеров. – Johanna
Я думаю, это поможет вам.
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();
Вы должны использовать проекцию апи как
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();
Также псевдонимы не используются в приведенном выше примере, но вы можете использовать псевдоним, он очень прост в использовании.
hey deepak, спасибо за ваш ответ. Но что abt мой table1.hbm.xml и table2.hbm.xml? я сохраняю какие-либо дополнительные конфигурации в файле table1.hbm.xml таблицы2.hbm.xml? –
Точно, я не знаю, что у вас есть в hbm-файлах, но, я думаю, не нужно менять/добавлять какие-либо конфигурации в hbm-файлах. – Deepak
Также, если вы обратитесь к решению Johanna, вам нужно изменить или добавить некоторые конфигурации в hbm-файлах. Я просто хочу сказать ... Есть много решений для вашего запроса в спящем режиме. – Deepak
Чтобы ответить на это, нам нужно увидеть объекты, которые отображают таблицы1 и таблицу2. – Pablo
Что представляют собой объекты, сопоставляющие эти таблицы? Что вы пробовали? Что вы не понимаете в документации Hibernate? http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#queryhql-joins –
Таблица 1 содержит столбцы id, code и table2 содержит id, name, repadd, repag. Мне нужно выбрать все данные из таблицы2, если они совпадают с идентификатором. –