powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Простейший SQL запрос Hibernate
12 сообщений из 37, страница 2 из 2
Простейший SQL запрос Hibernate
    #37756044
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при HQL запросе(который как я писал выше работает правильно), hibernate выдает следующее:

Hibernate: select event*...., images*..., from event left outer join image on event.id=images.parent_id where event.event_visible=1 order by event.id desc

Как я понял Limit'а тут нет, т.е. он что все записи считывает? )
...
Рейтинг: 0 / 0
Простейший SQL запрос Hibernate
    #37756076
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, мне кажется тогда уж проще вот так. Не прав?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
 List<Event> execute = (List<Event>) hibernateTemplate.execute(new HibernateCallback() {

            @Override
            public List<Event> doInHibernate(Session session) {

               
                 List<Event> result = null;
                
                Criteria criteria = session.createCriteria(Event.class);                
                criteria.addOrder(Order.desc("id")).setFirstResult(0).setMaxResults(3);
                
                
                
                result = criteria.list();

                for (Event event : result) {
                    hibernateTemplate.initialize(event.images);                                       
                }


                return result;

            }
        });
...
Рейтинг: 0 / 0
Простейший SQL запрос Hibernate
    #37756113
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmBlazkowicz, мне кажется тогда уж проще вот так. Не прав?
Это N+1 запросов на каждую страницу.
...
Рейтинг: 0 / 0
Простейший SQL запрос Hibernate
    #37756157
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, я не совсем понял как сделать
авторДелайте через подзапрос. Внутрений запрос с порядком и пэйджингом только по главной энтити. А внешний запрос с джоином. Подзапросы на Criteria API через DetachedCriteria делаются.

Не могли бы вы привести пример.
...
Рейтинг: 0 / 0
Простейший SQL запрос Hibernate
    #37756164
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmНе могли бы вы привести пример.
Уже:
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=934603&msg=12424031
...
Рейтинг: 0 / 0
Простейший SQL запрос Hibernate
    #37756174
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczДелайте через подзапрос. Внутрений запрос с порядком и пэйджингом только по главной энтити. А внешний запрос с джоином.
Подзапросы на Criteria API через DetachedCriteria делаются.
Я смотрел) Видимо не увидел среди английских фраз то что вы имели ввиду.
...
Рейтинг: 0 / 0
Простейший SQL запрос Hibernate
    #37756188
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пойду разберусь)
...
Рейтинг: 0 / 0
Простейший SQL запрос Hibernate
    #37756272
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczrdmНе могли бы вы привести пример.
Уже:
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=934603&msg=12424031
Пока я что-то не очень понял этот пример)
...
Рейтинг: 0 / 0
Простейший SQL запрос Hibernate
    #37756393
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, не получилось вообщем, не понял. Возвращается множество, о котором писал vas0.
Но) Пока писал это сообщение нашел вот такое решение:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
      
List<Event> execute = (List<Event>) hibernateTemplate.execute(new HibernateCallback() {

            @Override
            public List<Event> doInHibernate(Session session) {


                List<Event> result = null;

                Criteria criteria = session.createCriteria(Event.class);
                criteria.setFirstResult(0).setMaxResults(3);
                criteria.addOrder(Order.desc("id"));
                
                             
                  
                    criteria.setProjection(Projections.distinct(
                            Projections.projectionList().add(Projections.id())));
                    
                  
                    
                    List list = criteria.list();
                   
                    List<Long> idlist = new ArrayList<Long>();

                    for (Iterator iditer = list.iterator(); iditer.hasNext();) {
                        Long record = (Long) iditer.next();
                        idlist.add(record);
                    }

                    //Массив с id'шниками
                    Long[] listLong = idlist.toArray(new Long[0]);

                    List<Event> listResult = null;
                  
                   
                    if (idlist.size() > 0) {
                    Query setParameter = session.createQuery("from Event event inner join fetch event.images where event.visible = true AND event.id IN (:mas)").setParameterList("mas", listLong).setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
                    listResult = setParameter.list();
                    } else {
                        return new ArrayList();
                    }
               
                



                return listResult;



            }
        });



        return execute;




В логе хибернейт пишет 2 запроса:

Код: sql
1.
2.
3.
Hibernate: select distinct this_.id as y0_ from event this_ order by this_.id desc limit ?

Hibernate: select event* , image* from event inner join image on event.id=images.parent_id where event.event_visible=1 and (event.id in (? , ? , ?))



Вроде бы правильно? Я прав?
...
Рейтинг: 0 / 0
Простейший SQL запрос Hibernate
    #37756623
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmВроде бы правильно? Я прав?
Что-то похожее, но, в теории, можно ведь вместо списка и подзапросом сделать

WHERE Event.ID IN (SELECT ID FROM ...)
...
Рейтинг: 0 / 0
Простейший SQL запрос Hibernate
    #37756745
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczrdmВроде бы правильно? Я прав?
Что-то похожее, но, в теории, можно ведь вместо списка и подзапросом сделать

WHERE Event.ID IN (SELECT ID FROM ...)
Я такой запрос пробовал на SQL, первый работает, а второй нет.
Пишет "This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'"

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SELECT id
     , image.parent_id    
     , image.image_id
FROM
  shootride.event
LEFT JOIN image
ON image.parent_id = event.id
WHERE
  event.id IN (1, 2, 3);


SELECT id
     , image.parent_id    
     , image.image_id
FROM
  shootride.event
LEFT JOIN image
ON image.parent_id = event.id
WHERE
  event.id IN (SELECT event.id from event order by event.id limit 0,3);
...
Рейтинг: 0 / 0
Простейший SQL запрос Hibernate
    #37756763
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmЯ такой запрос пробовал на SQL, первый работает, а второй нет.
Пишет "This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'"

ОК
...
Рейтинг: 0 / 0
12 сообщений из 37, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Простейший SQL запрос Hibernate
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]