powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate проекции
60 сообщений из 60, показаны все 3 страниц
Hibernate проекции
    #39250994
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собссно вопрос, где на практике могут пригодиться проекции? Я имею ввиду в боевых условиях. Смотрю на них и не понимаю, ну да прикольно среднее значение вытащить по столбцу и т.п. но.. зачем??
...
Рейтинг: 0 / 0
Hibernate проекции
    #39251010
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,

Вопрос более чем страный. org.hibernate.criterion.Projections это часть Criteria API. Что логично следует из названия пакета. AVG, MAX, и прочее это часть SQL стандарта. Вас удивляет что Criteria API покрывает SQL стандарт? Вас удивляет наличие Criteria API в принципе?

Мы, например, count часто использовали. У нас в ERP, как это обычно бывает, очень жирные формы поиска. По этим формам приходится строить динамические запросы, и Criteria API для этой задачи не заменим. Для реализации постраничной выборки, вполне логично посылать два запроса, один на количество, второй на сами записи.

Переформулируйте вопрос.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39251606
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

у меня вопрос такого плана. Есть приложение некое. Связанное с торговолей. в базе есть таблица склдаская прихода-ухода товара. просто таблица где содержатся сведения о том по какой цене пришел по какой цене ушел какое количество ну и собссно что за товар.

теперь из этой таблы надо сделать отчет, типа топ продаваемых по количеству, топ продаваемых по прибыли, топ продаваемых по совокупному доходу и т.п.

собссно у меня вопрос следующий: я это без проблем всё могу сделать средствами голой явы, ну там коллекциями-итерациями-стортировками и т.п.

НО. тут вот есть мнение что на яве это делать уоще плохо и непрофессионально и делать надо это еще на уровне базы. т.е. либо голым сулем либо хибером с проекциями и т.п.

а проблема в следующем: вот я смотрю и на проекции и на критерии в принципе, и что то у меня в голове никак не вырисовывается простое решение.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39251612
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,

Отчеты лучше сразу делать нормально. На Pentaho или JasperReports + SQL, конечно же.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39251622
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

ну хорошо, но если забор не городить? т.е. по вашему мнению: ни хибер ни ява под эти дела не подходят?
...
Рейтинг: 0 / 0
Hibernate проекции
    #39251624
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTну хорошо, но если забор не городить? т.е. по вашему мнению: ни хибер ни ява под эти дела не подходят?
Pentaho и JasperReports написаны на Java. Они уже умеют всё то что вы можете написать самостоятельно и даже на много больше.
Некоторые умудряются писать отчеты на HQL/Criteria API, но особого смысла я в этом не вижу. ORM нужен для CRUD. Отчеты - совсем другая история.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39251641
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

я просто с жаспером не сталкивался.. может там действительно проще, но я не понимаю ну почему логику создания таких вот относительно "сложных" репортов проще делать в жаспере а не в яве описАть?
...
Рейтинг: 0 / 0
Hibernate проекции
    #39251648
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTя просто с жаспером не сталкивался.. может там действительно проще, но я не понимаю ну почему логику создания таких вот относительно "сложных" репортов проще делать в жаспере а не в яве описАть?
Что такое "в яве описАть" мне не понятно. Проще там что любой мало-мальски успешный проект имеет тенденции к развитию и усложнению. Если вы не верите в проект, то зачем вы им занимаетесь. Если верите - то почему не хотите использовать готовые инструменты, которые закроют часть будущих требований на несколько лет?
...
Рейтинг: 0 / 0
Hibernate проекции
    #39251649
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
описАть я подразумеваю в том контексте, что вот есть у тебя набор каких то данных в листе, тебе там надо что то сложить что то перемножить что то где то пересчитать, что-то вообще выбросить. следом сформировать уже новый лист и отправить его на вьюшку клиенту. Как то так я имею ввиду.

Джаспер репортс - это отдельный инструмент и его как бы осваивать надо, а джаву вроде как уже всю знаешь. Я не ленюсь просто задаюсь вопросом.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39251789
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот отличный вариант из жизни :

Есть таблица из которой вам нужно вытащить n последних операций по пользователю и терминалу :


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    @Override
    @Transactional
    public LastOperation getLastOperation(long login, long terminalId , int  firstResult) {
        DetachedCriteria criteria = DetachedCriteria.forClass(LastOperation.class);
       
        criteria.add(Restrictions.eq("login", login));
        criteria.add(Restrictions.eq("terminalId", terminalId));
        criteria.addOrder(Order.desc("creationDate"));
        List<?> items = getByCriteria(criteria, firstResult, 1);
        if (items == null || items.isEmpty()) {
            return null;
        }
        return (LastOperation) items.get(0);
    }



вот код который создает айбернет для выборки 1 последней записи ...

чтобы это все работало быстро нужно добавить индекс на три поля

Код: sql
1.
CREATE INDEX `idx_login_terminalId_creationDate`  ON `LastOperation` (login, terminalId, creationDate)



Код: sql
1.
2.
3.
4.
5.
 select this_.`transactionId` as transact1_2_0_, this_.creationDate as
creation2_2_0_, this_.login as login2_0_, this_.terminalId as
terminalId2_0_, this_.`LastOperation` as
 ticketFo5_2_0_ from `LastOperation` this_ where this_.login=****
 and this_.terminalId=**** order by this_.creationDate desc limit 1;



в mysql его EXPLAIN говорит о том что все ок ! ....
минус такого запроса в том что у нас есть индекс большой и сложный и операция order by для выборки одной записи ...

очень много записей нужно просмотреть ...даже использую индекс


где то можно все это оптимизировать и если нам в 90 % случаях нужна 1 запись - то пишем нечто такое ....



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
EXPLAIN
select s1.* from LastOperation s1
join
(select max(creationDate) as m_creationDate from LastOperation
where 1 = 1
and login=***** 
and terminalId=*****  ) t1 on s1.creationDate = t1.m_creationDate 
where 1 = 1
and s1.login=*****  
and s1.terminalId=***** 
limit 1;



что очень сильно улучшаешь вам жизнь ....

код на айбернейте для данного запроса прошу написать вам :) для самопроверки и понимания .
...
Рейтинг: 0 / 0
Hibernate проекции
    #39251799
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
session.createQuery("from mytable ORDER BY id DESC").setMaxResults(1).uniqueResult();
...
Рейтинг: 0 / 0
Hibernate проекции
    #39251813
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum, по SQL. Убрал в spoiler, т.к. много букв:

Atum1....чтобы это все работало быстро нужно добавить индекс на три поля
CREATE INDEX `idx_login_terminalId_creationDate` ON `LastOperation` (login, terminalId, creationDate)

...
order by this_.creationDate desc limit 1;
...
минус такого запроса в том что у нас есть индекс большой и сложный и операция order by для выборки одной записи ...

очень много записей нужно просмотреть ...даже использую индекс

Пользуйтесь правильными СУБД и умейти их готовить. Нормальные СУБД вполне order by по индексу умеют, т.ч. обращение может/должно быть всегда к одной записи.

С MySQL работал очень давно (((

В Oracle - order by может потребовать явного хинтования (INDEX_ASC, INDEX_DESC).

Первый попавшийся кусок из доки по PostgreSQL https://www.postgresql.org/docs/8.3/static/indexes-ordering.html ""

IMHO & AFAIK

Код: sql
1.
2.
3.
4.
select s1.* from LastOperation s1
join
(select max(creationDate) as m_creationDate from LastOperation
...



что очень сильно улучшаешь вам жизнь ....

На мой взгляд, первый запрос намного более "правильный". C join, можно словить ряд приятность, если creationDate не уникальная. В данном случае, с limit 1 это не проявится, но лично я такие конструкции не люблю.

В знакомых мне СУБД, max/min ничем не лучше order by с limit. Мне даже кажется, что в Oracle, этот вариант будет намного хуже.
====

Посмотрел первую попавшуюся доку по MySQL (перевод ужасный ((( половину примеров я не понял)

http://www.mysql.ru/docs/man/ORDER_BY_optimisation.html

подозреваю, что скорее всего, проблема с indexes и order by связана с пунктом:

"...Столбцы индекса могут содержать значения NULL, и используется ORDER BY ... DESC. Это объясняется тем, что в SQL значения NULL всегда сортируются в первую очередь, независимо от того, используется DESC или нет...."

Точно не знаю, могу высказать только предположение. IMHO. Плотно работал только с Oracle
...
Рейтинг: 0 / 0
Hibernate проекции
    #39251826
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTsession.createQuery("from mytable ORDER BY id DESC").setMaxResults(1).uniqueResult();
тут перекладывание части работы субд на java, что само по себе не оптимально.
хоть и выглядит красиво - одна строка,
но за этим фантиком скрыто куча лишних действий системы
...
Рейтинг: 0 / 0
Hibernate проекции
    #39251843
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяandreykaTsession.createQuery("from mytable ORDER BY id DESC").setMaxResults(1).uniqueResult();
тут перекладывание части работы субд на java, что само по себе не оптимально.
хоть и выглядит красиво - одна строка,
но за этим фантиком скрыто куча лишних действий системы
и что и что?
...
Рейтинг: 0 / 0
Hibernate проекции
    #39251862
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTвадяпропущено...

тут перекладывание части работы субд на java, что само по себе не оптимально.
хоть и выглядит красиво - одна строка,
но за этим фантиком скрыто куча лишних действий системы
и что и что?
и то и то
голову включи.
сначала в субд отсортируешь , потом передаёшь в java, там перебираешь весь объём, чтоб найти максимум и выбираешь 1 значение.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39251869
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По доке setMaxResults эквивалентно limit. Это НЕ setFetchSize.

Т.ч. разницы быть не должно.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39251872
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяandreykaTпропущено...

и что и что?
и то и то
голову включи.
сначала в субд отсортируешь , потом передаёшь в java, там перебираешь весь объём, чтоб найти максимум и выбираешь 1 значение.

серьезно? вам бы почитать как хибернейт работает.
можно еще логи sql включить и посмотреть что реально в БД будет выполняться
...
Рейтинг: 0 / 0
Hibernate проекции
    #39251879
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадятут перекладывание части работы субд на java, что само по себе не оптимально.
хоть и выглядит красиво - одна строка,
...
сначала в субд отсортируешь , потом передаёшь в java, там перебираешь весь объём, чтоб найти максимум и выбираешь 1 значение.
Вадя, ты просто набор каких-то домыслов, суеверий и заблуждений. В цитате выше в каждом предложении присутствует заблуждение.
И при этом советуешь кому-то ещё "голову включать".
...
Рейтинг: 0 / 0
Hibernate проекции
    #39251881
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Penkov Vladimirсерьезно? вам бы почитать как хибернейт работает.
можно еще логи sql включить и посмотреть что реально в БД будет выполняться
Он из принципа считает что ORM не нужен. При этом никогда его не использовал и понятия не имеет как он работает. Переубеждать бесполезно. Очередной Hibernate срач будет.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39251923
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevAtum, по SQL. Убрал в spoiler, т.к. много букв:

Atum1....чтобы это все работало быстро нужно добавить индекс на три поля
CREATE INDEX `idx_login_terminalId_creationDate` ON `LastOperation` (login, terminalId, creationDate)

...
order by this_.creationDate desc limit 1;
...
минус такого запроса в том что у нас есть индекс большой и сложный и операция order by для выборки одной записи ...

очень много записей нужно просмотреть ...даже использую индекс

Пользуйтесь правильными СУБД и умейти их готовить. Нормальные СУБД вполне order by по индексу умеют, т.ч. обращение может/должно быть всегда к одной записи.

С MySQL работал очень давно (((

В Oracle - order by может потребовать явного хинтования (INDEX_ASC, INDEX_DESC).

Первый попавшийся кусок из доки по PostgreSQL https://www.postgresql.org/docs/8.3/static/indexes-ordering.html ""

IMHO & AFAIK

Код: sql
1.
2.
3.
4.
select s1.* from LastOperation s1
join
(select max(creationDate) as m_creationDate from LastOperation
...



что очень сильно улучшаешь вам жизнь ....

На мой взгляд, первый запрос намного более "правильный". C join, можно словить ряд приятность, если creationDate не уникальная. В данном случае, с limit 1 это не проявится, но лично я такие конструкции не люблю.

В знакомых мне СУБД, max/min ничем не лучше order by с limit. Мне даже кажется, что в Oracle, этот вариант будет намного хуже.
====

Посмотрел первую попавшуюся доку по MySQL (перевод ужасный ((( половину примеров я не понял)

http://www.mysql.ru/docs/man/ORDER_BY_optimisation.html

подозреваю, что скорее всего, проблема с indexes и order by связана с пунктом:

"...Столбцы индекса могут содержать значения NULL, и используется ORDER BY ... DESC. Это объясняется тем, что в SQL значения NULL всегда сортируются в первую очередь, независимо от того, используется DESC или нет...."

Точно не знаю, могу высказать только предположение. IMHO. Плотно работал только с Oracle


тут нужно написать тот и тот запрос на таблице в 1 млн записей ... в которой по данным параметрам терминал ил огин будет по 100 т записей

и построить EXPLAIN

посмотреть время - замерить ...

потом добавить индексы - замерить ...

потом сравнить
...
Рейтинг: 0 / 0
Hibernate проекции
    #39251925
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTsession.createQuery("from mytable ORDER BY id DESC").setMaxResults(1).uniqueResult();


нужно смотреть какой код будет генериться в логах ... и писать тесты и EXPLAIN делать :)
...
Рейтинг: 0 / 0
Hibernate проекции
    #39251945
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВадя, ты просто набор каких-то домыслов, суеверий и заблуждений. В цитате выше в каждом предложении присутствует заблуждение.
И при этом советуешь кому-то ещё "голову включать".


если какая-то прокладка
session.createQuery("from mytable ORDER BY id DESC").setMaxResults(1).uniqueResult();
в строку sql вставляет что-то своё это ещё один повод говорить, что прокладка не нужна
и как с этой прокладкой производить оптимизацию исследовать EXPLAIN ...
кто хочет пусть пользуется, я мозахизмом не занимаюсь
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252137
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возвращаясь к теме ) Открыл я этот джаспер репортс и понял, что на вид это какой то полу-шаблонизатор полу-язык разметки. :)
т.е. всё с нуля осваивать. А как оно вообще работает? Он там как то хитро выстраивает скл запросы а потом красиво всё раскладывает, или же просто в себя вбирает тупо коллекции и так же их там пересчитывает-перекладывает и выкладывает на "вьюшки"?
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252205
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяandreykaTпропущено...

и что и что?
и то и то
голову включи.
сначала в субд отсортируешь , потом передаёшь в java, там перебираешь весь объём, чтоб найти максимум и выбираешь 1 значение.
с ума сойти. я канеш понимаю что хибер вроде опенсорса и там каждый школоло может понатворить дел. хотя, по честноку я сомневаюсь. И. Я не думаю что атм всё так сильно запущено :) тогда уж проще листом всю таблицу вытащить а потом гетнуть по индексу последнее значение. ))) Вадим, ну реально разницы нет между тем что ты сказал и то, что я описал только что.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252209
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
тут одинаково мыслим
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252288
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяandreykaT,
тут одинаково мыслим
Вадим, вообще то это была ирония. Ну подумай сам, у тебя скажем, табла с 10М записей, ты действительно думашеь что умные дяди ничего не придумали, кроме как чтоб достать последнюю запись обязательно надо забрать в память ВСЮ таблицу? Да харош. этого не может быть, потому что этого не может быть никогда
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252289
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
я не пойму в чём вопрос.
Jasper делает отчёты в PDF\Word\Excell.
Как ты это сделаешь на голой Java.
...
Если говорить о формах на экране, а не отчётах, то делай на чём угодно.
Всё от ГУИ зависит.
Это Java. Ты должен уметь 3 способа. А не один.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252295
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

стоп. у меня не стоит вопрос о том, как показывать репорты красиво. у меня стоит вопрос о том как из, скажем листа каких-то там объектов сделать уже другой лист, с некими сводными проанализированными и прокалькулироваными данными. в начале темы сказано что именно мне надо. я так понял, что джаспер умеет сам делать и выборку и аналитику и т.п. имея какой-то внутренний синтаксис специализированный для этого. А ты сейчас рушишь мои надежды и говоришь, что джаспер это по-сути шаблонизатор, один из многих.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252297
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
давай так. Более конкретно.
В Jasper есть входной запрос
sekect * ........ на 15 страниц данных.
И там есть несколько аналитических функций которые внизу этих страниц покажут сумму или среднее.
Понятно, что сначала весь запрос обработает 1 раз выведет сумм сам без доп запроса.
Что тут тебе непонятно?
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252298
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
что значит лист объектов у JasperReport?
У меня он работает на голом sql запросе.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252299
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO
если тебе надо банальные и простые аналитические функции (summ\avg\max),
то это умеет ГУИ или движок Отчётника.
Т.е. это делает ГУИ программист, а не Java программист с его хибером.
Нужно понимать, что в Java очень много вещей дублируется друг у друга.
Можно запросто изобретать велосипед и работать вхолостую.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252300
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например, у меня аналитик\заказчик ставит задачу так:
- внизу таблиц под 2-мя колонками сделай сумму Итого.
Т.е. в идеале я должен объекту таблице дать команду внизу колонки вывести сумму.
Если это сделать вне таблицы отдельным полем TEdit то они визуально будут отдельно.
Это не понравится заказчику.
Получается что твой хибер идёт лесом.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252306
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

ну не совсем. если жаспер точно так же забирает данные как селект * фром табель. то я не вижу разницы - жаспер это сделает или я жстлками разрисую а потом в пдф.

задача следующая (не знаю простая она или нет) - есть сквозная таблица, где содержится инфа о приходе уходе товара. в контексте ухода идет сведения о партии, об отпускной цене, наценке и кто это купил. цель сделать таблицу (лист строк), в которой через серии будет вытащен товар (джойн привет), потом все серии потоварно будут скомпанованы в один "товар", потом собраны в кучу все отпускные цены и приходные цены, расссчитана суммарная разница между приход уход, рассчитана средняя наценка, показно общее количество отпущенного товара и отсортирована таблица по прибыли (или доход - вечно их путаю, профит короче). далее полученную модельку отправить клиенту в виде ясона, либо самому раскидать жстлом в жспшке. как это сделать на яве я знаю. я уже это сделал, НО зашел разговор что все эти расчеты надо делать на стадии скуля и уже из скуля доставать ГОТОВУЮ таблицу. и сейчас как бы вопрос скорее оптимальности - где это лучше делать и всё. честно скажу, так с ходу это сделать на уровне скуля мне знаний не хватит. на уровне хибера это будет трэшняк похлеще голой явы.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252307
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,

таблица ессно не из одного товара а из много товаров. 1 строка - 1 товар.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252309
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВадим, вообще то это была ирония. Ну подумай сам, у тебя скажем, табла с 10М записей, ты действительно думашеь что умные дяди ничего не придумали, кроме как чтоб достать последнюю запись обязательно надо забрать в память ВСЮ таблицу? Да харош. этого не может быть, потому что этого не может быть никогда
умные придумали для нормального использования, а дураки суют везде....
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252310
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяавторВадим, вообще то это была ирония. Ну подумай сам, у тебя скажем, табла с 10М записей, ты действительно думашеь что умные дяди ничего не придумали, кроме как чтоб достать последнюю запись обязательно надо забрать в память ВСЮ таблицу? Да харош. этого не может быть, потому что этого не может быть никогда
умные придумали для нормального использования, а дураки суют везде....
мне нравится твоя игра слов, но очень жаль, что я не понял того, что ты говоришь :) раскрой мысль пожалуйста )
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252311
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор НО зашел разговор что все эти расчеты надо делать на стадии скуля и уже из скуля доставать ГОТОВУЮ таблицу. и сейчас как бы вопрос скорее оптимальности - где это лучше делать и всё. честно скажу, так с ходу это сделать на уровне скуля мне знаний не хватит. на уровне хибера это будет трэшняк похлеще голой явы.
ну вот с этого и надо начинать.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252312
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTстоп. у меня не стоит вопрос о том, как показывать репорты красиво. у меня стоит вопрос о том как из, скажем листа каких-то там объектов сделать уже другой лист, с некими сводными проанализированными и прокалькулироваными данными.
То есть "теперь из этой таблы надо сделать отчет" это вообще не твои слова, а злые хакеры от твоего имени на форум запостили?

andreykaTв начале темы сказано что именно мне надо.

"где на практике могут пригодиться проекции?" это то что тебе надо? Это вопрос из начала темы.

andreykaTя так понял, что джаспер умеет сам делать и выборку и аналитику и т.п.
Никто сам ничего не умеет. Аналитика это вообще отдельная песня. В Jasper она только за деньги. В Pentaho забесплатно.
Возможно ты имеешь ввиду Query Builder под "сам делать выборку"? А про "аналитику" вообще смешно. Ты в это слово что вкладываешь?

andreykaTодин из многих.
Твои рассуждения о системе отчетов на уровне рассуждений вади об ORM. Если тебе нужны отчеты, то JasperReports и Pentaho это оно. Если тебе не нужны, отчеты, то тебе, вероятно, нужно что-то другое. Но ты сам заикнулся об отчетах.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252313
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTну не совсем. если жаспер точно так же забирает данные как селект * фром табель. то я не вижу разницы - жаспер это сделает или я жстлками разрисую а потом в пдф.
не select from table, а уже готовый запрос со всей аналитикой. Тебе же это сказали - ГОТОВАЯ таблица.
Проблема в SQL запросе?
Давай напишем.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252314
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автормне нравится твоя игра слов, но очень жаль, что я не понял того, что ты говоришь :) раскрой мысль пожалуйста )
мне трудно это разъяснить.... вроде элементарное...
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252319
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

давай так, когда ты из кучи данных делаешь некую логически связную выборку - это тоже аналитика. буквоедствовать не буду, т.к. определение "аналитики" вообще само по себе достаточно пространное.

я не вижу смысла перепираться на тему кто кого и как ввел в заблуждение, и уж тем более ругаться. я лишь зашел задать вопрос профессионалам и всё. если джаспер этого не умеет делать то окей - это лишь означает, что он мне для решения ЭТОЙ ЗАДАЧИ не нужен вот и всё. красивый отчетик я в конце-концов бахнуть могу и на апач-пои. )) но, да. это геморройно.

У меня же речь идет именно что о получении некой коллекции с нужными мне элементами. кстати, одним из вариантов в джаспер и уходит такой вот лист в объектами, который он красиво и раскладывает по строчкам.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252321
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

окей, я вас понял :) кусок таблицы вытащу, покажу, чтоб более осязаемо говорить о вещи. ) может там действительно всё просто.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252412
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTодним из вариантов в джаспер и уходит такой вот лист в объектами, который он красиво и раскладывает по строчкам.
вот ты и покажи OR придумай простой пример.
Т.к. я не понимаю как так работать с Jasper.
Я готовлю для него запрос и могу показать как работаю я))). LOL
И мне всегда интересно как работаешь ты))) LOL
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252426
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123andreykaTодним из вариантов в джаспер и уходит такой вот лист в объектами, который он красиво и раскладывает по строчкам.
вот ты и покажи OR придумай простой пример.
Т.к. я не понимаю как так работать с Jasper.
Я готовлю для него запрос и могу показать как работаю я))). LOL
И мне всегда интересно как работаешь ты))) LOL
хз. какой то первый пример в яндексе как пользоваться яспером и вывел - там передавался просто лист "бинов" и в путь. ну суть в принципе та же: лист = таблица из скл.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252481
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,

Диалог сводится к следующему.
- Подскажите как сделать, ведь я сам не знаю.
- Делай так-то.
- Объясните почему так.
- Потому что...
- Я не согласен. Я знаю как лучше.

Блин. Ну, зачем было вообще спрашивать, если имеется своё собственное видение, понимание и полная уверенность в своей правоте?
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252505
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Блакович, я возможно некорректно выразился. Вас я в заблуждение вводить точно не хотел. Еще раз речь зашла о том, что надо вытащить некую сводную таблицу, которую Я назвал отчетом (возмножно не прав и это не отчет а как-то по-иному называется). А далее по тексту я предполагал, что "сводной" ее делать надо средствами хибера - ну там хитрые критерии каскадного вида, проекции и т.п. либо же просто перетасовкой коллекций. вот и всё.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252521
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTБлакович, я возможно некорректно выразился. Вас я в заблуждение вводить точно не хотел. Еще раз речь зашла о том, что надо вытащить некую сводную таблицу, которую Я назвал отчетом (возмножно не прав и это не отчет а как-то по-иному называется). А далее по тексту я предполагал, что "сводной" ее делать надо средствами хибера - ну там хитрые критерии каскадного вида, проекции и т.п. либо же просто перетасовкой коллекций. вот и всё.

Смотри. Тебе нужно реализовать сложную выборку. Projection это часть Criteria API. Criteria API полезны для составления динамических запросов. Динамические запросы, обычно, формируются в формах поиска с кучей опциональных параметров. Тебе нужны динамические запросы в "отчетах"? Разве что если у тебя десяток типовых запросов к разным сущностям. Тогда Criteria API как-то помогут переиспользовать код запросов.
Если у тебя нет кучи опцирональных параметров. Если у тебя нет надобности строить динамические запросы, то зачем тут Criteria API?

Едем дальше. Hibernate это ORM. Основная задача ORM это CRUD для сущностей с кучей ассоциаций. Тебе нужен CRUD? Нет! Тебе нужно вытаскивать всё дерево сущностей? Нет! Внимание вопрос. Зачем тебе для решения это задачи ORM? Только чтобы не писать JOIN-ы? Сомнительная выгода.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252529
oneHalf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jasper Reports умеет делать все что ты хочешь - и группировку сделать и промежуточные итоги прокалькулировать (и показать их разумеется), можно даже свою сложную логику навернуть, да еще все красиво нарисовать с графиками, картинками и т.д.

Просто это все будет делаться в процессе исполнения кода - on runtime, получается что конечно умеет аналитику, только она динамическая, которая при каждом запуске отчета будет отрабатывать.
Здесь есть минусы:
- если динамическая, значит не персистентная - нигде не хранится в отличие от OLAP кубов
- жестко привязана к одной технологии - к Jasper Reports в данном случае
- ограничение на большие выборки данных - больше 100 тыс. записей с более менее сложной аналитикой - и jasper уходит пить чай.

Последний минус в общем и привел к возникновению хранилищ данных т.е. OLAP и соответствующих инструментов, за которые, как правило, просят денег :)
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252539
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oneHalfПоследний минус в общем и привел к возникновению хранилищ данных т.е. OLAP и соответствующих инструментов, за которые, как правило, просят денег :)
Поэтому для аналитики берут Pentaho CE, а для красивых отчетов - JasperReports CE. В принципе, там и лицензии не заоблачные, для большинства решений.
Pentaho CE "за так" предлагает ETL, OLAP и прочее, что у JasperSoft только за деньги.
Но, у JasperReports лучший pixel perfect движок для генерации отчетов, и, если я не ошибаюсь, у них более интересная интеграция в Web/JavaScript.
Поэтому тут уже каждый решает для себя сам, в зависимости от количества данных и требований к результату.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252543
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTPetro123пропущено...

вот ты и покажи OR придумай простой пример.
Т.к. я не понимаю как так работать с Jasper.
Я готовлю для него запрос и могу показать как работаю я))). LOL
И мне всегда интересно как работаешь ты))) LOL
хз. какой то первый пример в яндексе как пользоваться яспером и вывел - там передавался просто лист "бинов" и в путь. ну суть в принципе та же: лист = таблица из скл.
понятно.
Я его использую по второму варинту. Через вызов по урл (REST).
Тогда я его вызываю по урл, он подымает заранее написанный SQL запрос и САМ лезет в БД за данными по нему.
Т.е. это вариант без бинов и листов)).
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252546
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oneHalf,
ну, 100к записей конечно требуют других решений и ПО.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252579
oneHalf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OLAP то ли был то ли с какого то времени попал в CE:
http://www.jaspersoft.com/editions?_ga=1.13558455.1204738042.1465372091

Без плюшек, конечно, но движок поставляется нахаляву :)
...
Рейтинг: 0 / 0
Hibernate проекции
    #39252585
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oneHalfБез плюшек, конечно, но движок поставляется нахаляву :)
Прикольно. Буквально несколько месяцев назад сравнивал. Про OLAP не помню. Но ETL точно не было. Теперь есть в CE. Видать гонятся за Pentaho.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39255883
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevНа мой взгляд, первый запрос намного более "правильный". C join, можно словить ряд приятность, если creationDate не уникальная. В данном случае, с limit 1 это не проявится, но лично я такие конструкции не люблю.

В знакомых мне СУБД, max/min ничем не лучше order by с limit. Мне даже кажется, что в Oracle, этот вариант будет намного хуже.

тут ,как мне кажется фишка вся в том что делая max подате с параметрами мы находим дату по индексу - а это очень быстро ...

а дальше просто выбираем эту самую запись .. что в общем случае быстрее чем order by limit 1 /// в инете полно проблем для постраничного вывода как раз mysql order by limit 1 https://habrahabr.ru/post/217521/

Вопрос как этот запрос написать на DetachedCriteria

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
       DetachedCriteria maxCriteria = DetachedCriteria.forClass(SoldTickets.class, "sq")
                .setProjection(Projections.max("transactionId"));
        maxCriteria.add(Restrictions.eq("login", login));
        maxCriteria.add(Restrictions.eq("terminalId", terminalId));
        
        DetachedCriteria criteria = DetachedCriteria.forClass(SoldTickets.class, "rq");

 

        criteria.add(Subqueries.in("rq.transactionId", maxCriteria));

        List<?> items = ht.findByCriteria(criteria);



вроде как генерит верный код ,но ругается вот на что ...

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
    select
        this_.`transactionId` as transact1_1_0_,
        this_.creationDate as creation2_1_0_,
        this_.login as login1_0_,
        this_.terminalId as terminalId1_0_,
        this_.`ticketForSale` as ticketFo5_1_0_ 
    from
        `SoldTickets` this_ 
    where
        ? in (
            select
                max(sq_.`transactionId`) as y0_ 
            from
                `SoldTickets` sq_ 
            where
                sq_.login=? 
                and sq_.terminalId=?
        )



видимо тут засада

Код: java
1.
2.
3.
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long

criteria.add(Subqueries.eq("rq.transactionId", maxCriteria));
...
Рейтинг: 0 / 0
Hibernate проекции
    #39305620
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTBlazkowicz,
"сводной" ее делать надо средствами хибера - ну там хитрые критерии каскадного вида, проекции и т.п. либо же просто перетасовкой коллекций. вот и всё.

Экспортирую таблицы из хибернейт базу. Типичный запрос на каждую таблицу:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
    select assetDisplayName, assetId, x.keyName, x.value  from asset a
     JOIN PersistentEntityNode  pn ON pn.fqn = a.assetId + '/CUSTOM'
     JOIN PersistentEntityEntry pe ON pe.NODE_ID = pn.NODE_ID
     JOIN CustomProperties_CustomPropertyValue cv ON cv.CustomProperties_persistanceId = pe.entityId
     JOIN  (SELECT cp.*, vt.persistenceId, vt.value
         FROM customproperties_meta_key cp
         JOIN CustomPropertyValue   vt  ON vt.propertyKey = cp.keyId
         WHERE cp.keyId LIKE 'ASSET_USER_Custom%'
    )x ON x.persistenceId = cv.customProperties_persistenceId



Причем чтобы реверсинжениритиь это занимает часов 5 минимум.
В базе полсотни таблиц.

Теперь вот скажите как человеку решившему прикрутить репорт или сделать экспорт выташить данные? Я бы авторов этих ОРМ систем душил бы в детстве.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39305641
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LepsikПричем чтобы реверсинжениритиь это занимает часов 5 минимум.
ничё не понял.
ОРМ и хибер не строят БД и не делают структуру БД.
Они только подстраиваются под вашу логически и физически правильную структуру таблиц.
Поэтому что вы делали 5 часов непонятно.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39306373
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ничё не понял.
ОРМ и хибер не строят БД и не делают структуру БД.


Ну это не совсем так.
Hibernate на основе entity может создать БД.
Точнее - таблицы, ключи (первичные и внешние), sequence.
Причем если точно не описывать в аннотациях, то у Hibernate есть свои "умолчания", по которым он будет строить БД.
...
Рейтинг: 0 / 0
Hibernate проекции
    #39307087
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulHibernate на основе entity может создать БД.
может. Это не значит что это штатная операция в боевой БД у заказчика?
Это так - игрушка. Не более того.
Ты сам понял, зачем в БД у заказчика - JOIN PersistentEntityEntry?
...
Рейтинг: 0 / 0
Hibernate проекции
    #39307453
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123mad_nazgulHibernate на основе entity может создать БД.
Ты сам понял, зачем в БД у заказчика - JOIN PersistentEntityEntry?

как вы прикрутите сторонний компонент к базе если он понимает только плоские таблицы?
...
Рейтинг: 0 / 0
Hibernate проекции
    #39307471
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsik,
Переведи абракадабру.
Сторонние компоненты прикручивают к боевой базе заказика только при отсутствии ТЗ и безопасников в штате.
...
Рейтинг: 0 / 0
60 сообщений из 60, показаны все 3 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate проекции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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