|
|
|
hibernate problem with setParameterList
|
|||
|---|---|---|---|
|
#18+
Пишу такой запрос: Код: java 1. 2. 3. 4. 5. 6. по логам хибера видно: авторHibernate: select candidate_skill.candidate_id from candidate_skill inner join skill on skill.id = candidate_skill.skill_id where skill_id in (?, ?) group by candidate_skill.candidate_id Having count(candidate_skill.candidate_id) = (select count(*) from skill where skill.id in ?, ? ) получается 1 раз вокруг автор:skillIdList он ставит скобочки, а второй раз - нет. Почему такое странное поведение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 18:15:09 |
|
||
|
hibernate problem with setParameterList
|
|||
|---|---|---|---|
|
#18+
ошибка: Код: java 1. 2. 3. 4. 5. 6. код такой изначально.Вышеуказанный мне пришлось написать, чтобы это всё заработало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 18:16:45 |
|
||
|
hibernate problem with setParameterList
|
|||
|---|---|---|---|
|
#18+
redwhite90 Код: sql 1. 2. Порядок следования частей стейтмента (having и where) точно не перепутан? Ну и не факт, что подзапрос в having - хорошая идея, даже если синтаксис/СУБД это допускают. P.S. [src java] на [src sql] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 19:50:06 |
|
||
|
hibernate problem with setParameterList
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, всё правильно с последовательностью...сначала where потом having а что такого в вложенном запросе внутри having? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 20:11:45 |
|
||
|
hibernate problem with setParameterList
|
|||
|---|---|---|---|
|
#18+
redwhite90 , Да хз, почему он не обернул. А почему он должен был обернуть? В примере http://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/Query.html#setParameterList(java.lang.String, java.lang.Object[])]здесь они руками обернули в скобки. Basil A. SidorovНу и не факт, что подзапрос в having - хорошая идея, даже если синтаксис/СУБД это допускают.Я бы поостерегся делать такие заявления. Что плохого в подзапросе в havaing? Ну подзапрос и подзапрос, having и having. Скорость выполнения запроса беспокоит? Да вроде нет. Ну значит ничего плохого в этом нет. Вот будет беспокоить запрос - тогда да, надо смотреть на план, и искать проблему. В противном случае это будет "premature optimization", которая ни к чему хорошему не приводит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 20:12:29 |
|
||
|
hibernate problem with setParameterList
|
|||
|---|---|---|---|
|
#18+
redwhite90всё правильно с последовательностью...сначала where потом havingДа, был неправ. Ну тогда остаётся вбить запрос с образцами аргументов в какой-нибудь sqlplus и увидеть результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 20:20:11 |
|
||
|
hibernate problem with setParameterList
|
|||
|---|---|---|---|
|
#18+
свеном, поиск по странице ключевой фразы авторsetParameterList не дал результата примера использования и соответственно непонятно что он в примере обернул Я бы не удивился, если бы он и там и там обернул, либо ни там ни там, а то он в одном месте оборачивает, в другом нет, как девушка прямо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 20:22:15 |
|
||
|
hibernate problem with setParameterList
|
|||
|---|---|---|---|
|
#18+
Тогда остаётся еще один вопрос: почему в тексте вашего запроса в первый раз скобки не ставятся, а во второй - ставятся? Насколько я вижу - первый вариант hibernate обрабатывает корректно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 20:24:20 |
|
||
|
hibernate problem with setParameterList
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, я увидел лог, да и подправил, чтобы работало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 20:27:40 |
|
||
|
hibernate problem with setParameterList
|
|||
|---|---|---|---|
|
#18+
redwhite90свеном, поиск по странице ключевой фразы авторsetParameterList не дал результата примера использования и соответственно непонятно что он в примере обернул Я бы не удивился, если бы он и там и там обернул, либо ни там ни там, а то он в одном месте оборачивает, в другом нет, как девушка прямо.Вот сслыка, скопируйте е от и до вместе с пробелом, там в описании метода пример http://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/Query.html#setParameterList(java.lang.String, java.lang.Object[]) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 20:30:24 |
|
||
|
hibernate problem with setParameterList
|
|||
|---|---|---|---|
|
#18+
Если я всё правильно понимаю, то без доп.оберток в параметризованных запросах есть только позиционные параметры маркируемые знаками вопроса. Таким образом, без сахарка в виде именованных параметров вам пришлось бы самостостоятельно на писать в "in (...)" вместо многоточия столько знаков вопросов, сколько элементов списка вы собрались передать, да ещё и правильно "разбавить" их запятыми. Хибер облегчает вашу жизнь, но т.к. людям свойственно ошибаться - он может делать это неправильно. "Как-то так" (ц) Винни-Пух ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 20:41:18 |
|
||
|
hibernate problem with setParameterList
|
|||
|---|---|---|---|
|
#18+
свеном, да) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 20:44:16 |
|
||
|
hibernate problem with setParameterList
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, наверное) Вдогонку спрошу, есть ли смысл переписывать такой запрос на hql? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2013, 12:38:44 |
|
||
|
hibernate problem with setParameterList
|
|||
|---|---|---|---|
|
#18+
redwhite90Вдогонку спрошу, есть ли смысл переписывать такой запрос на hql?Писать запросы на HQL имеет смысл, если: 1) Вам нужна переносимость приложения между базами данных. Т.е. сегодня SQL Server, завтра Oracle. В реальности это просто маркетинговый бред. Единственное, это может быть полезно для тестов. 2) У вас есть договоренность в команде писать по максимуму на HQL, например, потому что другие ваши коллеги не секут в SQL синтаксисе определенной СУБД. Все. На этом причины использовать HQL заканчиваются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2013, 13:04:48 |
|
||
|
hibernate problem with setParameterList
|
|||
|---|---|---|---|
|
#18+
Мне кажется, запрос можно слегка оптимизировать: - не нужен join с таблицей skill, достаточно чтобы candidate_skill.skill_id in (:skillIdList) - не нужен вложенный запрос в конце, так как количество заранее известно и его можно передать вторым параметром (skills.size()). Конечно, при условии, что список skills валидный Ну, а после этого попытаться сделать на hql. Переносимость системы - важное преимущество, что бы там ни говорили. Если это не legacy система, с которой уже ничего не поделаешь, лучше попытаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2013, 13:28:28 |
|
||
|
hibernate problem with setParameterList
|
|||
|---|---|---|---|
|
#18+
ivanraМне кажется, запрос можно слегка оптимизировать: - не нужен join с таблицей skill, достаточно чтобы candidate_skill.skill_id in (:skillIdList) - не нужен вложенный запрос в конце, так как количество заранее известно и его можно передать вторым параметром (skills.size()). Конечно, при условии, что список skills валидный Ну, а после этого попытаться сделать на hql. Переносимость системы - важное преимущество, что бы там ни говорили. Если это не legacy система, с которой уже ничего не поделаешь, лучше попытаться."Переносимость системы" это фикция, маркетинговая байка. Когда создают типичное трехзвенное приложение, то: - либо база данных изветсна наперед, лицензии закуплены, менять ее никто не собирается. В этом случае переносимость нафиг никому не сдалась. - с выбором БД еще не определились, или же она будет скорее всего бесплатной, или еще что-то, что говорит в пользу того, что переезжать возможно придется. В этом случае переносимость оправдана. Более того, как только приложение преодолевает некую планку по сложности или требованиям к производительности, переносимость не то, что не помогает, она начинает тянуть приложение на дно, так как на HQL запросах вы не можете выжать из СУБД все соки. Наконец, в реальной жизни практически никогда не бывает "гладких переездов", когда БАЦ - и ты пересел на новую СУБД без изменения кода. Не бывает такого. Взять хотя бы аннотации для ключей - на SQL Server это identity, а на Oracle - это сиквенсы. И все, приехали - надо лезть менять код. И среди всех таких изменений, переписать несколько дестяков кастомных запросов - это одна из самых простых задач, на которую уйдет от силы несколько дней. Это капля в море по сравнению с развертыванием новой СУБД, ее настройкой, администрированием, и профилированием перформанса, на которые могут уходить месяцы. Так что пишите себе спокойно обычный SQL и не парьтесь, если у вас нет каких-то явных причин писать переносимый код. А абстрактное "а вдруг мы переедем на другую СУБД в будущем" оставьте предсказамусам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2013, 13:50:49 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38363775&tid=2128822]: |
0ms |
get settings: |
15ms |
get forum list: |
27ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
61ms |
get topic data: |
22ms |
get forum data: |
6ms |
get page messages: |
98ms |
get tp. blocked users: |
3ms |
| others: | 314ms |
| total: | 560ms |

| 0 / 0 |
