Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java tools & IDE's > Hibernate


Автор: Вано 15.9.2004, 11:58
Помогите перевети запрос из MySQL в HQL (Hibernate-запрос).
Ситуация такая:
таблица user;
Код
+-----------+-----------+------+-----+---------+----------------+
| Field     | Type      | Null | Key | Default | Extra          |
+-----------+-----------+------+-----+---------+----------------+
| id        | int(11)   |      | PRI | NULL    | auto_increment |
| name      | char(20)  | YES  |     | NULL    |                |
| extradata | char(200) | YES  |     | NULL    |                |
+-----------+-----------+------+-----+---------+----------------+
таблица grupa;
Код
+-------------+-----------+------+-----+---------+----------------+
| Field       | Type      | Null | Key | Default | Extra          |
+-------------+-----------+------+-----+---------+----------------+
| id          | int(11)   |      | PRI | NULL    | auto_increment |
| name        | char(20)  | YES  |     | NULL    |                |
| description | char(200) | YES  |     | NULL    |                |
+-------------+-----------+------+-----+---------+----------------+


и связани отношением много к многим

таблицей grupa_user;
Код
+---------+---------+------+-----+---------+-------+
| Field   | Type    | Null | Key | Default | Extra |
+---------+---------+------+-----+---------+-------+
| grupaid | int(11) |      |     | 0       |       |
| userid  | int(11) |      |     | 0       |       |
+---------+---------+------+-----+---------+-------+


запрос для заполнения таблиц (для тестирования работи)

Код
delete from user;
insert into user (id, name, extradata) values (1, "[email protected]", "name");
insert into user (id, name, extradata) values (2, "[email protected]", "name");
insert into user (id, name, extradata) values (3, "[email protected]", "name");
insert into user (id, name, extradata) values (4, "[email protected]", "name");
insert into user (id, name, extradata) values (5, "[email protected]", "name");

delete from grupa;
insert into grupa (id, name, description) values (1, "group1", "888");
insert into grupa (id, name, description) values (2, "group2", "888");
insert into grupa (id, name, description) values (3, "group3", "888");
insert into grupa (id, name, description) values (4, "group4", "888");

delete from grupa_user;
insert into grupa_user (userid, grupaid) values (1, 1);
insert into grupa_user (userid, grupaid) values (2, 1);
insert into grupa_user (userid, grupaid) values (3, 1);
insert into grupa_user (userid, grupaid) values (4, 1);
insert into grupa_user (userid, grupaid) values (5, 1);
insert into grupa_user (userid, grupaid) values (2, 2);
insert into grupa_user (userid, grupaid) values (1, 3);
insert into grupa_user (userid, grupaid) values (2, 3);
insert into grupa_user (userid, grupaid) values (3, 3);
insert into grupa_user (userid, grupaid) values (1, 4);
insert into grupa_user (userid, grupaid) values (2, 4);
insert into grupa_user (userid, grupaid) values (4, 4);


и наконец интересующий меня запрос

Код
select distinct id, name
from user
left join grupa_user as include
on ( include.userid = user.id and include.grupaid in (1, 4) )
left join grupa_user as exclude
on ( exclude.userid = user.id and exclude.grupaid in (2, 3) )
where include.grupaid is not null and exclude.grupaid is null;


он возвращает Юзеров которие входят в группы (1,4) но не входят в группы (2,3). В етом примере результат Юзера с id = 4 и 5.

Помогите перевести етот запрос на HQL (Hibernate-запрос).

Зарание БЛАГОДАРЕН

Автор: Вано 15.9.2004, 12:23
Ура народ я уже знаю как ето сделать

Код
   String sql = "select distinct u.id as {uzer.id},"
     + " u.name as {uzer.name},"
     + " u.extradata as {uzer.extradata} from User u "
     
     + "left join grupa_user as include "
     + "on ( include.userid = u.id and include.grupaid in (1, 4) ) "
     + "left join grupa_user as exclude "
     + "on ( exclude.userid = u.id and exclude.grupaid in (2, 3) ) "
     + "where include.grupaid is not null and exclude.grupaid is null;";
     
     
   List results =
     session.createSQLQuery(sql, "uzer", User.class).list();


Все равно спасибо всем кто осмелился прочитать до конца заданый мною вопрос smile.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)