| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Statement vs Session |
| Автор: Platon 6.12.2007, 22:59 |
| Здравствуйте, уважаемые. Не хочу показаться глупым, но мне кажется, что использование Hibernate меня как-то ограничивает. У меня 3 причины думать так: 1. Необходимо пройти специализированные курсы (или самостоятельно не один день посидеть над книжками), чтоб не запороть проект, надеясь, что Hibernate сделает за тебя всё правильно. 2. 10-15 % производительности тоже не лишние. (слабый аргумент, но озвучить стоит) 3. Пропадает свобода (правда частичная) в смысле UserType, специфических запросов так просто уже не получить :( а жаль. (собствено ради этого пункта я и создал тему) Есть много чего хорошего в hibernate, безусловно... но как быть с 3-м пунктом? |
| Автор: Platon 6.12.2007, 23:55 | ||
| Чего темнить, задам пример: 3 таблички: car_mark record_id name <...> car_model record_id mark_id name <...> cars record_id model_id <...> Задачка заключается в том, чтобы подсчитать количество тачек определенной марки. Запрос выполняется вот такой:
|
| Автор: check 7.12.2007, 00:22 |
| Platon, можно ведь использовать http://www.hibernate.org/hib_docs/v3/reference/en/html/querysql.html. Добавлено через 1 минуту и 40 секунд Конечно тогда не будет переносимости между разными СУБД. |
| Автор: COVD 7.12.2007, 00:35 | ||
Это большой философский вопрос, потому что вместо последнего (Hibernate) можно много чего подставить. |
| Автор: SoulKeeper 7.12.2007, 01:04 |
| Тема довольно интересная |
| Автор: w1nd 7.12.2007, 02:00 |
Откуда такая цифра? |
| Автор: tux 7.12.2007, 02:06 | ||
Сравнения с чем? Любая библиотека/технология применима, подходит или не подходит в конкретных условиях, в конкретном проекте или задаче. Я могу сказать "Hibernate - это супер, используйте и радуйтесь", а кто-то другой "Hibernate - отстой, все что делали с его использованием пришлось переделать" потому что Hibernate использовался неоправданно или просто неправильно. И оба будем по-своему правы. Ну и какого сравнения ты ждешь? Получишь набор диаметрально противоположных мнений и все, как их потом фильтровать? Расскажи подробно о задаче, в которой ты собираешься его использовать, может быть что-нибудь посоветуем. Это касается не только Hibernate, а вообще любой технологии. Добавлено через 3 минуты и 32 секунды По-моему хибернейтовцы сами где-то на сайте писали про 10%. Сейчас наверное не найду упоминания. Цифра, конечно, странная. |
| Автор: serger 7.12.2007, 06:51 | ||
Для отчётности ;) |
| Автор: Platon 7.12.2007, 09:24 | ||
| Ну, блин, полуночники!!! check, весьма познавательная стетейка. Литературный прием ;) Statement и Session как олицетворение JDBC и Hibernate соответственно. На самом деле, мое мнение о hibernate крайне положительное. Всё-таки как не крути, а все объекты из БД проецируются в память наиболее естественным образом. Приятно удивило, что в пределах 1-й сессии вызов get() ссылается на 1 и тот же объект, приятно, что есть возможность создания наиболее естественным образом иерархии классов, связь объектов и много чего другого... Но что-то консервативное во мне отвергает его. Добавлено через 9 минут и 35 секунд по статье native SQL, ч понял, что можно использовать этот финт:
На сколько я понял, этот CatDTO не является персистентной сущностью? |
| Автор: Platon 7.12.2007, 10:46 | ||||
Что-то не получается поработать с рефлексией:
|
| Автор: SoulKeeper 7.12.2007, 10:59 |
В теме и в первом посте написано что с чем ;) |
| Автор: alexadr 7.12.2007, 13:41 |
| также жду решения проблемы с данным запросом! |
| Автор: w1nd 7.12.2007, 13:46 |
| Мэппинг на бочку |
| Автор: tux 7.12.2007, 14:02 | ||
Цитирую для лучшей усвояемости.
Внимание, вопрос. Hibernate нужно сравнить с UserType, специализированными курсами, книжками, третьим пунктом, 10-ю процентами или "запороть проект"? |
| Автор: Platon 7.12.2007, 14:55 |
| w1nd, на самом деле маппинга никакого не проводил, думая, что .setResultTransformer(Transformers.aliasToBean(Mon.class)); не нуждается в маппировании. Добавлено через 1 минуту и 40 секунд или aliasToBean тоже нуждается в маппировании? И ещу уж вопрос, что лучше? Маппирование или аннотации? Мне к душе ближе аннотации, глаз не режут, но как я вижу, профы в основном пользуются xml маппингом. |
| Автор: Platon 7.12.2007, 15:29 |
| Читая книжку по hibernate, наткнулся на интересный термин "проблема n + 1 запросов". Это к слову о том, что необходимо хорошенько изучить hibernate чтоб с ним нормально работать. А то ведь многие программисты и не знают, что гробят БД от того, что не видят, какие запросы выполняются. Так, сазать, нельзя прочувствовать то, что руками не написано. Добавлено через 31 секунду Хотя, опять же оговорюсь, такое случается от неопытности ^_^ |
| Автор: AlexeyVorotnikov 7.12.2007, 15:42 | ||||
Просто работа с аннотациями в Hibernate появилась не так давно. А вот что лучше, IMHO, зависит просто от личных склонностей.
Как это они БД гробят? |
| Автор: serger 7.12.2007, 15:44 | ||
Это я уже с утра на работе писал ;) |
| Автор: AlexeyVorotnikov 7.12.2007, 15:48 |
Что это за проблема? |
| Автор: Platon 7.12.2007, 16:40 |
Наверно http://www.ayende.com/Blog/archive/7627.aspx подойдет, хотя я не вникал... Добавлено через 39 секунд Ну, в смысле производительность БД резко падает. |
| Автор: SoulKeeper 7.12.2007, 19:28 | ||
Ну если нефиг делать, то естесвенно что нужно запороть десяток проектов. Вопрос в Hibernate vs JDBC через обычные Statement. Если хочется пофлудить, то будь так добр и флуди в другом месте. |
| Автор: tux 7.12.2007, 23:07 | ||
Молодой человек, научитесь культуре общения и в первую очередь вопросы задавать. |
| Автор: Platon 9.12.2007, 22:25 |
| Народ! Я так и не получил ответа на вопрос по запросу :( Как правильно оформить такой запрос? |
| Автор: tux 9.12.2007, 22:35 | ||
Да практически так же. Только здесь многое будет зависеть от маппинга. Например, так:
В запросе должны фигурировать только Java-объекты и их атрибуты, а связи между объектами будут определяться тем, как у тебя организован маппинг. |
| Автор: Platon 9.12.2007, 22:40 | ||
tux, Хотите сказать тот пример
не катит, и для чего тогда это??? Обязательно маппить? Я конечно понимаю, что логично маппить каждую таблицу, но создавать по классу на запрос, дело утомительное. |
| Автор: tux 9.12.2007, 22:59 |
| Если тебе нужен SQL-запрос, то нужно будет создать java-класс, в который будут выгружаться результаты. Неужели настолько много запросов, чтобы создать под каждый бин результата? |
| Автор: Platon 9.12.2007, 23:03 |
| tux, Про бины нет вопросов. Но дополнительный маппинг. Вот, я нашел какой-то метод, видимо им мало кто пользовался Transformers.aliasToBean(Mon.class) Но я не понял почему первый же сеттер бина не проходит, выдает ошибку. |
| Автор: LSD 11.12.2007, 00:28 |
| Попробуй для начала назвать property согласно спецификациям Java, т.е. recordId. |
| Автор: AlexeyVorotnikov 11.12.2007, 10:27 |
| У тебя тип самого record_id -- long, а тип аргумента в сеттере -- Long. Поэтому и IllegalArgumentException вылетает. (Скорее всего) Приведи всё к одному типу и посмотри, что получится. |
| Автор: LSD 11.12.2007, 12:18 | ||
Это смотря как они определяют тип property, если по get/set методам, то это все равно, там просто будет autoboxing на автомате и все. |
| Автор: Platon 11.12.2007, 20:19 | ||||||||||||||
| Подведем предварительный итог: Я понял, как работают Query! и это меня очень радует, понял, что Hibernate как никогда освобождает меня от бремени использования рукописных запросов. Теперь по делу: Все-таки не могу добиться результата работы данного запроса :(
Генерируется следующий родной запрос:
Вот это я сварганил, но выдается ошибочка:
|
| Автор: AlexeyVorotnikov 11.12.2007, 22:08 | ||
|
| Автор: Platon 12.12.2007, 06:36 | ||||
| Долгожданный ответ!!! Спасибо. Только подправь recored_id на record_id на случай, если кто-то будет интересоваться темой. И мне чтоб окончательно заработало надо было поменять setter в Mon
на
|
| Автор: Platon 12.12.2007, 07:35 | ||
Если уж быть педантично точным, то требуемый запрос был:
|