|
|
|
Как правильно написать SQL запрос через CriteriaBuilder?
|
|||
|---|---|---|---|
|
#18+
Есть такой запрос к БД в SQL: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Можно конечно createNativeQuery и сунуть туда всё это, а потом ручками отобразить на объекты, но это как-то некрасиво. Как бы его переписать через CriteriaBuilder? Код: sql 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. В результате criteriaQuery.select(schet.join("sluchList", JoinType.LEFT).join("uslList", JoinType.LEFT)).distinct(true); получается список cущностей usl. Хочется выполнить этот запрос и чтоб результаты пораспихались по объектам. Но не получается сделать это 1-им запросом. Если я буду обращаться к связанным сущностям полученной сущности, то будут доставаться все связанные сущности, так как будут генерироваться запросы вида: Код: sql 1. Или выполнять 1 и тот же запрос для каждой сущности, а потом их как-то ручками соединять друг с другом? Но связанных сущностей у меня 13. 13 раз выполнять этот запрос с join'ми? Суть проблемы в том, что если использовать criteriaQuery.multiselect(schet, sluch, usl); то на выходе получается какой-то идиотский запрос типа: Код: sql 1. 2. 3. 4. 5. 6. Недостаток этого запроса в том, что если хотя бы 1 таблица пустая, то весь запрос вернёт пустой результат. Следовательно: Мне не надо чтобы у меня генерировался запрос с перечислением таблиц в секции from через запитую. Подскажите как лучше поступить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2012, 14:37:24 |
|
||
|
Как правильно написать SQL запрос через CriteriaBuilder?
|
|||
|---|---|---|---|
|
#18+
Я вам крайне советую отказаться от критериев в таких запросах, hql или native sql рулит. Неужели вам самому не режет глаз этот убогий код? Критерии нужно для случаев вроде поиска, и желательно максимум на 1-2 сущность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2012, 14:39:45 |
|
||
|
Как правильно написать SQL запрос через CriteriaBuilder?
|
|||
|---|---|---|---|
|
#18+
Ну, код сейчас очень корявый, так как я упражнялся и пробовал разные варианты. Но я бы не сказал, что это режет глаз. Хотелось бы сделать это именно через CriteriaBuilder, так как это более универсально, чем пихать NativeQuery. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2012, 14:42:11 |
|
||
|
Как правильно написать SQL запрос через CriteriaBuilder?
|
|||
|---|---|---|---|
|
#18+
авторЯ вам крайне советую отказаться от критериев в таких запросах, hql или native sql рулит. В случае с NativeQuery. А как потом распихать всё это по объектам? Ручками Если говорить про EJBQL, то можно ли этот запрос переписать в EJBQL примерно так: SELECT Schet,Sluch,Usl,Error,Intox,Expert From Schet JOIN Sluch JOIN Usl .... WHERE .... ORDER BY ... То есть так, чтоб всё в объёкты попало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2012, 14:48:18 |
|
||
|
Как правильно написать SQL запрос через CriteriaBuilder?
|
|||
|---|---|---|---|
|
#18+
Ну чем это более универсально? Запрос будет выполняться на sql, вводя критерии вы вводите дополнительный слой абстракции, куча кода по преобразованию оттуда-сюда и обратно, к тому же при дебаге гораздо проще взять sql - запустить и посмотреть что выдало а с критериями че? Дело конечно ваше, но по опыту - это лишняя работа, хотя может быть полезно для опыта) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2012, 14:50:24 |
|
||
|
Как правильно написать SQL запрос через CriteriaBuilder?
|
|||
|---|---|---|---|
|
#18+
Niky4000А как потом распихать всё это по объектам? Ручками Вроде, если алиасы задать нормально и указать хиберу, то он справиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2012, 14:50:29 |
|
||
|
Как правильно написать SQL запрос через CriteriaBuilder?
|
|||
|---|---|---|---|
|
#18+
про Transformer слышали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2012, 14:51:10 |
|
||
|
Как правильно написать SQL запрос через CriteriaBuilder?
|
|||
|---|---|---|---|
|
#18+
забыл никпро Transformer слышали? В JPA ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2012, 14:54:08 |
|
||
|
Как правильно написать SQL запрос через CriteriaBuilder?
|
|||
|---|---|---|---|
|
#18+
Не слышали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2012, 14:54:31 |
|
||
|
Как правильно написать SQL запрос через CriteriaBuilder?
|
|||
|---|---|---|---|
|
#18+
Niky4000Не слышали. Hibernate рулит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2012, 14:56:42 |
|
||
|
Как правильно написать SQL запрос через CriteriaBuilder?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczзабыл никпро Transformer слышали? В JPA ? С JPA давно не работал, что там нету такого? Я писал основываясь на Hibernate. Ну тогда hql и aliasы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2012, 14:56:55 |
|
||
|
Как правильно написать SQL запрос через CriteriaBuilder?
|
|||
|---|---|---|---|
|
#18+
авторНу чем это более универсально? Запрос будет выполняться на sql, вводя критерии вы вводите дополнительный слой абстракции, куча кода по преобразованию оттуда-сюда и обратно, к тому же при дебаге гораздо проще взять sql - запустить и посмотреть что выдало а с критериями че? Подключили другую СУБД и ничего не изменилось - вот в чём универсальность. А с критериями включили логирование и посмотрели что за запрос сервер сгенерировал. А как я узнал что он дурь генерирует? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2012, 14:58:19 |
|
||
|
Как правильно написать SQL запрос через CriteriaBuilder?
|
|||
|---|---|---|---|
|
#18+
Niky4000Подключили другую СУБД и ничего не изменилось - вот в чём универсальность. Это глупость. Во-первых смена СУБД требует полноценного тестирования, не зависимо от того ORM вы используете или SQL. Во-вторых это необходимость такой смены на длинном проекте возникает не чаще чем раз в год-два. Так что эта "универсальность" ради "универсальности" ещё никого не спасла. Niky4000А с критериями включили логирование и посмотрели что за запрос сервер сгенерировал. А нативный SQL запрос по какой магической причине логироваться не будет? Или в чем проблема? Niky4000А как я узнал что он дурь генерирует? И как это влияет на правильный выбор решения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2012, 15:03:12 |
|
||
|
Как правильно написать SQL запрос через CriteriaBuilder?
|
|||
|---|---|---|---|
|
#18+
Niky4000Подключили другую СУБД и ничего не изменилось - вот в чём универсальность. :) Ну ладно, я вам свое мнение сказал. Правда я за 7 лет на java такого еще не видел, чтобы поменяли СУБД, а если даже бы и поменяли - там геморра другого было бы куча по сравнению с парой запросов). По большому счету это маркетинговый миф, базу можно поменять максимум в самом начале, после выхода в продакшен - ну это кхм..маловероятно. Niky4000А с критериями включили логирование и посмотрели что за запрос сервер сгенерировал. Вот именно - лезть на сервер, смотреть логи, а не проще в код глянуть? Опять же я ни на чем не настаиваю, просто пытаюсь не дать наступить вам на грабли, там где сам шишку набил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2012, 15:04:56 |
|
||
|
Как правильно написать SQL запрос через CriteriaBuilder?
|
|||
|---|---|---|---|
|
#18+
Niky4000Подключили другую СУБД и ничего не изменилось - вот в чём универсальность. И вообще забудьте слово "универсальный". Им обычно начинающие разработчики прикрывают своё субъективное мнение. Существуют разные более объективные критерии, чем "универсальная" программа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2012, 15:05:24 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37890603&tid=2131295]: |
0ms |
get settings: |
17ms |
get forum list: |
27ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
64ms |
get topic data: |
21ms |
get forum data: |
5ms |
get page messages: |
96ms |
get tp. blocked users: |
3ms |
| others: | 321ms |
| total: | 566ms |

| 0 / 0 |
