|
|
|
динамическая выборка с criteria API
|
|||
|---|---|---|---|
|
#18+
Есть определенный набор полей, пользователь может выбирать из них необходимые ему, изменять последовательность и в соотвествии с этим получать xls документ. Всё было бы отлично, но основной документ имеет как many-to-one так и many-to-many зависимости, из-за этого когда в список полей добавляется поле, которое находится в такой зависимости, hibernate использует JOIN и при плохом расскалде получаем не одну строчу, а 2 и более. Сейчас это все работает на Projection, примерно так: Код: java 1. 2. 3. patternsHolder содержит набор объектов, которые описывают конкретные поля выборки, умеют применять себя к criteria + доп инфа для правильного отображения их в xls. Как это сейчас: - есть метод который возвращает набор Pattern'ов типа такого: Код: java 1. 2. 3. 4. 5. 6. 7. они описываются в коде и жестко привязаны к версии. - Пользователю показывается окошко с этим списком(соответственно обработанным), где он выбирает что и как ему нужно. - Полученный список Pattern'ов через patternsHolder используется для создания criteria и получения списка List<Object[]> из которого в дальнейшем и рисуется xls Тут видимо проблема в самом подходе, мне кажется решить проблему при таком способе просто не удастся. Пытался придумать другой вариант организации, но ничего в голову не приходит. Может кто подскажет идею как такое можно сделать? Так как от версии к версии набор полей в объектах меняется, нужно как-то делать так, чтобы сопровождать это можно было просто добавив/удалив/изменив набор соответствующих паттернов, ну или что-то вроде. Буду признателен за какие-либо идеи. ----- Предоставленные сами себе события имеют тенденцию развиваться от плохого к худшему.(с)Мерфи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 09:11:05 |
|
||
|
динамическая выборка с criteria API
|
|||
|---|---|---|---|
|
#18+
Раз есть отношения many-to-one и many-to-many, значит, в "основной" таблице имеются поля, содержащие не одно значение, а коллекцию. Вот и надо их выводить как одно поле, но с перечислением элементов коллекции, тогда все уместится в 1 запись. Для того, чтобы criteria API возвращал это в виде 1 записи, необходимо сделать правильный мэппинг, но тут подсказать что-то можно только увидев схему данных. Вот например, такая схема Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. А вот так её можно отобразить в объекты: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Для таблицы H_OFFICE_OPTION даже нет мэппинга и отдельного класса, она вся в виде коллекции попала в поле основной таблицы: Код: java 1. Остается только решить вопрос как вывести коллекцию в ячейку Excel, но это, думаю, не проблема ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 09:54:44 |
|
||
|
динамическая выборка с criteria API
|
|||
|---|---|---|---|
|
#18+
ivanra, т.к. система уже работает, переделывать мапинги уже позняк, может когда нова версия будет, тогда посмотрю. на данный момент мапинги такого вида: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ищу решение исходя из текущих реалий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 10:17:12 |
|
||
|
динамическая выборка с criteria API
|
|||
|---|---|---|---|
|
#18+
Код: java 1. Или я не понял вопроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 10:17:46 |
|
||
|
динамическая выборка с criteria API
|
|||
|---|---|---|---|
|
#18+
Blazkowicz Код: java 1. Или я не понял вопроса? наверное не поняли, или я не так описал. патерны применяются к критерии вот так Код: java 1. 2. 3. 4. 5. и т.к. crit.list() возвращает не сам объект Complaint, то и никакого DISTINCT_ROOT_ENTITY не происходит. Возвращается банальный набор List<T[]>, который является отображения результата select'а. как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 10:37:29 |
|
||
|
динамическая выборка с criteria API
|
|||
|---|---|---|---|
|
#18+
DDiver, Понял. Но вы всё равно хотите Distinct, ведь, по какому-то полю? Можно реализовать свой ResultTransformer, для пособработки результата. Или добавить Projection с Distinct по какому-то полю С другой стороны не понятно в чем тут смысл? Так как у вас нет сущностей, то вы не сможете из результата джоина собрать ассоциации. Выходит где-то проблема в постановке задачи. Во-первых Hibernate это ORM. Если вы работаете с отдельными полями без сущностей, возможно, Hibernate - не совсем правильный выбор. Во-вторых объясните какой именно результат вы ожидаете. Вот есть пользовате выбирает Заказ и Товары. У одного заказа несколько товаров. Как вы хотите это отобразить в XLS? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 10:53:53 |
|
||
|
динамическая выборка с criteria API
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, мне тоже кажется что использование полей без сущностей плохой вариант, но как выбирать у сущности только выбранные пользователем поля, я себе пока представить не могу. Если как-то это сделать, то тут проблема сама уйдет. По поводу отображения: выглядит вот так примерно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 11:10:21 |
|
||
|
динамическая выборка с criteria API
|
|||
|---|---|---|---|
|
#18+
BlazkowiczВот есть пользовате выбирает Заказ и Товары. У одного заказа несколько товаров. Как вы хотите это отобразить в XLS? товары можно через запятую. Если заказчик согласен. Но, вы правы - это уже не ОРМ. В РСУБД \ на клиенте делают свёртку-процедуру по полю = в один стринг. Хотя это можно сделать и XLS. Ведь XLS это Представление модели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 11:11:54 |
|
||
|
динамическая выборка с criteria API
|
|||
|---|---|---|---|
|
#18+
DDiverПо поводу отображения: выглядит вот так примерно Как вы его формируете? Если руками, то: - объединить ячеки Количество = Count подчинённых полей - вписать в эту ячеку - вписать коллекцию - перейти на след Мастер-запись ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 11:19:44 |
|
||
|
динамическая выборка с criteria API
|
|||
|---|---|---|---|
|
#18+
Petro123, руками с небольшим шаманством :) проблема возникает в том, что когда у основного объекта в двух разных коллекциях есть более одного объекта. Невозможно узнать какая именно коллекция наплодила дублей. [Заказ1;(Товар1,Товар2);Цена;(Телфон1,Телефон2)] выдаст 4 строки соответственно. в выходных данных отличить его от [Заказ1;(Товар1,Товар2,Товар3,Товар4);Цена;(Телфон1)], который тоже даст 4 строки не получится. Можно конечно вытаскивать ещё и ID объектов коллекций, и ориентируясь по ним решать что именно двоится, но мне кажется это совсем через одно место способ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 11:32:38 |
|
||
|
динамическая выборка с criteria API
|
|||
|---|---|---|---|
|
#18+
DDiver, ОРМ применяют для CRUD а не для Отчётных систем. Без ОРМ это решается ОДНИМ запрорсом на Отчёт с добавлением 3 раза: SELECT AAAA GROUP BY, GROUP BY, GROUP BY Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 12:18:47 |
|
||
|
динамическая выборка с criteria API
|
|||
|---|---|---|---|
|
#18+
Petro123DDiver, ОРМ применяют для CRUD а не для Отчётных систем. Без ОРМ это решается ОДНИМ запрорсом на Отчёт с добавлением 3 раза: SELECT AAAA GROUP BY, GROUP BY, GROUP BY Удачи! да не отчетная это система, просто заказчик хочет иметь возможность выгрузки данных в сыром виде из БД(зачем не спрашивайте), вот это и делает мой алгоритм. Сейчас пробую ещё один вариант, если получится то напишу что придумал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 12:21:18 |
|
||
|
динамическая выборка с criteria API
|
|||
|---|---|---|---|
|
#18+
Ну что же, изменив метод смог реализовать задуманное. Забил на вытаскивание конкретных столбцов из БД, тащу сразу сущности. Написал класс, который полученную жалобу вычитывает и сохраняет в определенном виде, удобно для доступа из вне по имеющимся метаданным. Ну а далее бежим по списку паттернов, вытаскиваем нужные данные из класса-обертки и рисуем жалобу в xls. ЗЫ Вот что форум животворящий в пятницу делает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2013, 15:06:12 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2129463]: |
0ms |
get settings: |
19ms |
get forum list: |
28ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
67ms |
get topic data: |
25ms |
get forum data: |
6ms |
get page messages: |
101ms |
get tp. blocked users: |
3ms |
| others: | 335ms |
| total: | 596ms |

| 0 / 0 |
