![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Здравствуйте, уважаемые.
Не хочу показаться глупым, но мне кажется, что использование Hibernate меня как-то ограничивает. У меня 3 причины думать так: 1. Необходимо пройти специализированные курсы (или самостоятельно не один день посидеть над книжками), чтоб не запороть проект, надеясь, что Hibernate сделает за тебя всё правильно. 2. 10-15 % производительности тоже не лишние. (слабый аргумент, но озвучить стоит) 3. Пропадает свобода (правда частичная) в смысле UserType, специфических запросов так просто уже не получить :( а жаль. (собствено ради этого пункта я и создал тему) Есть много чего хорошего в hibernate, безусловно... но как быть с 3-м пунктом? |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Чего темнить, задам пример:
3 таблички: car_mark record_id name <...> car_model record_id mark_id name <...> cars record_id model_id <...> Задачка заключается в том, чтобы подсчитать количество тачек определенной марки. Запрос выполняется вот такой:
Это сообщение отредактировал(а) Platon - 7.12.2007, 00:18 |
|||
|
||||
| check |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
Platon, можно ведь использовать native SQL.
Добавлено через 1 минуту и 40 секунд Конечно тогда не будет переносимости между разными СУБД. |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Это большой философский вопрос, потому что вместо последнего (Hibernate) можно много чего подставить. Это сообщение отредактировал(а) COVD - 7.12.2007, 01:03 |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 31 Всего: 132 |
Такой запрос легко перенести на HQL. Не вижу проблем. Специфичные для СУБД вещи конечно используя Hibernate реализовать не удастся, там ведь никто и не заставляет использовать его всегда. Просто нужно искать какой-то компромис - там где выгоднее использовать HQL, использовать его, а остальных случаях использовать native SQL. Вот и все. Кто кого ограничивает мне не понятно.
Извиняюсь, а на Java ты моментально писать начал. Насколько я понимаю использование любой тулзы требует определенного времени на изучение. И тебе решать что тебе важнее - выгода от ее использование или потраченное время. Опять-таки не понимаю в чем ограничения. У тебя полная свобода выбора. |
|||
|
||||
| SoulKeeper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 14.1.2007 Где: Ukraine, Lviv. Репутация: 11 Всего: 15 |
Тема довольно интересная
|
|||
|
||||
| w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
-------------------- ![]() ![]() |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 31 Всего: 132 |
Сравнения с чем? Любая библиотека/технология применима, подходит или не подходит в конкретных условиях, в конкретном проекте или задаче. Я могу сказать "Hibernate - это супер, используйте и радуйтесь", а кто-то другой "Hibernate - отстой, все что делали с его использованием пришлось переделать" потому что Hibernate использовался неоправданно или просто неправильно. И оба будем по-своему правы. Ну и какого сравнения ты ждешь? Получишь набор диаметрально противоположных мнений и все, как их потом фильтровать? Расскажи подробно о задаче, в которой ты собираешься его использовать, может быть что-нибудь посоветуем. Это касается не только Hibernate, а вообще любой технологии. Добавлено через 3 минуты и 32 секунды По-моему хибернейтовцы сами где-то на сайте писали про 10%. Сейчас наверное не найду упоминания. Цифра, конечно, странная. |
|||
|
||||
| serger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 1 Всего: 5 |
Для отчётности ;) -------------------- упс! |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Ну, блин, полуночники!!!
check, весьма познавательная стетейка. Литературный прием ;) Statement и Session как олицетворение JDBC и Hibernate соответственно. На самом деле, мое мнение о hibernate крайне положительное. Всё-таки как не крути, а все объекты из БД проецируются в память наиболее естественным образом. Приятно удивило, что в пределах 1-й сессии вызов get() ссылается на 1 и тот же объект, приятно, что есть возможность создания наиболее естественным образом иерархии классов, связь объектов и много чего другого... Но что-то консервативное во мне отвергает его. Добавлено через 9 минут и 35 секунд по статье native SQL, ч понял, что можно использовать этот финт:
На сколько я понял, этот CatDTO не является персистентной сущностью? |
|||
|
||||
| Platon |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Что-то не получается поработать с рефлексией:
|
||||
|
|||||
| SoulKeeper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 14.1.2007 Где: Ukraine, Lviv. Репутация: 11 Всего: 15 |
||||
|
||||
| alexadr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 25.9.2006 Репутация: 4 Всего: 4 |
также жду решения проблемы с данным запросом!
|
|||
|
||||
| w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Мэппинг на бочку
-------------------- ![]() ![]() |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 31 Всего: 132 |
Цитирую для лучшей усвояемости. Внимание, вопрос. Hibernate нужно сравнить с UserType, специализированными курсами, книжками, третьим пунктом, 10-ю процентами или "запороть проект"? |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
w1nd, на самом деле маппинга никакого не проводил, думая, что .setResultTransformer(Transformers.aliasToBean(Mon.class)); не нуждается в маппировании.
Добавлено через 1 минуту и 40 секунд или aliasToBean тоже нуждается в маппировании? И ещу уж вопрос, что лучше? Маппирование или аннотации? Мне к душе ближе аннотации, глаз не режут, но как я вижу, профы в основном пользуются xml маппингом. |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Читая книжку по hibernate, наткнулся на интересный термин "проблема n + 1 запросов".
Это к слову о том, что необходимо хорошенько изучить hibernate чтоб с ним нормально работать. А то ведь многие программисты и не знают, что гробят БД от того, что не видят, какие запросы выполняются. Так, сазать, нельзя прочувствовать то, что руками не написано. Добавлено через 31 секунду Хотя, опять же оговорюсь, такое случается от неопытности ^_^ |
|||
|
||||
| AlexeyVorotnikov |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 18.6.2007 Где: Москва Репутация: 10 Всего: 18 |
Просто работа с аннотациями в Hibernate появилась не так давно. А вот что лучше, IMHO, зависит просто от личных склонностей.
Как это они БД гробят? -------------------- RTFM! Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification |
||||
|
|||||
| serger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 1 Всего: 5 |
Это я уже с утра на работе писал ;) -------------------- упс! |
|||
|
||||
| AlexeyVorotnikov |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 18.6.2007 Где: Москва Репутация: 10 Всего: 18 |
-------------------- RTFM! Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Наверно пример подойдет, хотя я не вникал... Добавлено через 39 секунд Ну, в смысле производительность БД резко падает. |
|||
|
||||
| SoulKeeper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 14.1.2007 Где: Ukraine, Lviv. Репутация: 11 Всего: 15 |
Ну если нефиг делать, то естесвенно что нужно запороть десяток проектов. Вопрос в Hibernate vs JDBC через обычные Statement. Если хочется пофлудить, то будь так добр и флуди в другом месте. |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 31 Всего: 132 |
||||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Народ! Я так и не получил ответа на вопрос по запросу :(
Как правильно оформить такой запрос? |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 31 Всего: 132 |
Да практически так же. Только здесь многое будет зависеть от маппинга. Например, так:
В запросе должны фигурировать только Java-объекты и их атрибуты, а связи между объектами будут определяться тем, как у тебя организован маппинг. |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
tux, Хотите сказать тот пример
не катит, и для чего тогда это??? Обязательно маппить? Я конечно понимаю, что логично маппить каждую таблицу, но создавать по классу на запрос, дело утомительное. |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 31 Всего: 132 |
Если тебе нужен SQL-запрос, то нужно будет создать java-класс, в который будут выгружаться результаты. Неужели настолько много запросов, чтобы создать под каждый бин результата?
|
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
tux, Про бины нет вопросов. Но дополнительный маппинг.
Вот, я нашел какой-то метод, видимо им мало кто пользовался Transformers.aliasToBean(Mon.class) Но я не понял почему первый же сеттер бина не проходит, выдает ошибку. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Попробуй для начала назвать property согласно спецификациям Java, т.е. recordId.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| AlexeyVorotnikov |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 18.6.2007 Где: Москва Репутация: 10 Всего: 18 |
У тебя тип самого record_id -- long, а тип аргумента в сеттере -- Long. Поэтому и IllegalArgumentException вылетает. (Скорее всего)
Приведи всё к одному типу и посмотри, что получится. -------------------- RTFM! Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Это смотря как они определяют тип property, если по get/set методам, то это все равно, там просто будет autoboxing на автомате и все. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Platon |
|
||||||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Подведем предварительный итог:
Я понял, как работают Query! и это меня очень радует, понял, что Hibernate как никогда освобождает меня от бремени использования рукописных запросов. Теперь по делу: Все-таки не могу добиться результата работы данного запроса :(
Генерируется следующий родной запрос:
Вот это я сварганил, но выдается ошибочка:
Это сообщение отредактировал(а) Platon - 30.12.2007, 21:59 |
||||||||||||||
|
|||||||||||||||
| AlexeyVorotnikov |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 18.6.2007 Где: Москва Репутация: 10 Всего: 18 |
-------------------- RTFM! Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification |
|||
|
||||
| Platon |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Долгожданный ответ!!! Спасибо.
Только подправь recored_id на record_id на случай, если кто-то будет интересоваться темой. И мне чтоб окончательно заработало надо было поменять setter в Mon
на
|
||||
|
|||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Если уж быть педантично точным, то требуемый запрос был:
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |