|
|
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
Имеет ли смысл использовать hibernate или spring когда есть встроенный в томкате средство для БД? что будет быстрее работать, важна скорость и безопасность ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 08:50 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
ЕлдосИмеет ли смысл использовать hibernate или spring когда есть встроенный в томкате средство для БД? что будет быстрее работать, важна скорость и безопасность Имеет ли смысл купить жигули, или лучше на тележке кирпичи возить, если у меня в розетке дома 220В. Важно чтобы сила тока была постоянной. В Tomcat нет встроеных средств для работы с БД. Есть встроеное в JSE API средство, которое называется JDBC. Hibernate это ORM, который решает свой класс задачь. Spring это вообще контейнер состоящий из десятков модулей. О чем конкретно речь не понятно. Скорость и безопасность вам не важна, пока вы не разбираетесь даже в предназначении различных API и собираете SQL параметры через конкатенацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 09:15 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЕлдосИмеет ли смысл использовать hibernate или spring когда есть встроенный в томкате средство для БД? что будет быстрее работать, важна скорость и безопасность Имеет ли смысл купить жигули, или лучше на тележке кирпичи возить, если у меня в розетке дома 220В. Важно чтобы сила тока была постоянной. В Tomcat нет встроеных средств для работы с БД. Есть встроеное в JSE API средство, которое называется JDBC. Hibernate это ORM, который решает свой класс задачь. Spring это вообще контейнер состоящий из десятков модулей. О чем конкретно речь не понятно. Скорость и безопасность вам не важна, пока вы не разбираетесь даже в предназначении различных API и собираете SQL параметры через конкатенацию. да, я не понимаю я еще учусь, и объяснить сложно было. подскажите что что мне использовать, задача чтобы в час может в день 100 000 запросов в БД. что посоветуете использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 09:24 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
Елдосда, я не понимаю я еще учусь, и объяснить сложно было. подскажите что что мне использовать, задача чтобы в час может в день 100 000 запросов в БД. что посоветуете использовать? Производительность это фиговый критерий выбора фреймверка. Основные критерии это 1) Упрощение кода, замена рутины фреймверком, высокая читаемость. 2) Массштабируемость. Даже если ваш сервер будет выдавать 50 000 запросов в час максимум. При хорошей масштабируемости вы тупо подымете второй такой сервер. И решите проблему роста. А если у вас сервер вадёт нужные 100 000, а завтра нужно 200 000 и он не масштабируется, это на много хуже. Объясните проект. Подберем фреймверк. Spring Data + JPA - умеет прятать куча рутины. Но вам бы я его не рекомендовал вообще. Так как без понимания как оно работает внутри будет очень не просто. Hibernate/JPA - это обычные ORM. Они полезны когда у вас много CRUD и сущности связаны в крупные деревья ассоциаций (человек-работник-должность-департамент-подразделение и т.п.) myBatis - никогда не пробовал, но народ почему-то хвалит. Меня отталкивает кучей рукописного SQL. Возможно решает вопрос с ассоциациями? QueryDSL, JOOQ и другие аналоги. Довольно приятные SQL билдеры. Не решают проблемы ассоциаций, но решают вопросы динамического SQL и использования SQL в проекте. JOOQ, вроде, платный для комерческий проектов. А вопросы безопасности и скорости ни один фреймверк за вас не решит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 10:01 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
Есть у меня ощущение, что всякие ОРМ, Майбатисы и жуки - они для тех, кто не может в SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 10:53 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
t00kukЕсть у меня ощущение, что всякие ОРМ, Майбатисы и жуки - они для тех, кто не может в SQL. Согласен. ВАЗ 2101 - вещь. Все эти ваши "тойоты" и "форды" для тех кто не может коробку пересобрать. Рассуждения на уровне гаражного механика. Разные инструменты решают разные задачи. Кичится своим невежеством не прилично. myBatis так вообще один сплошной SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 11:01 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Зря, зря.. MyBatis - рулит!!! Лично мне не влом писать вручную insert'ы и update'ы, если я при этом на 100% понимаю, как это работает. По мне JPA слишком сложен, и не облегчает жизнь программиста, а наоборот, её усложняет, до предела запутывая доменную модель, сложными ассоциациями. В то время как в MyBatis ты мапишь сам запрос на тот или иной домен. Плюс, как правило в команде, не все разработчики являются гуру, а есть и junior'ы и middle'ы. По моему опыту даже многие senior'ы не до конца понимают, как работает jpa. Про быстродействие вообще молчу. Сложные селекты, так вообще просто ад. Мое мнение, что JPA имеет смысл использовать только, когда нужна поддержка большого кол-ва разных СУБД, ну или для какой-нить админки, где производительность не критична, а нужен тупо CRUD. P.S. Поймите правильно, а не отрицаю того факта, что и на MyBatis можно заговнокодить так, что оптимизированный JPA будет на порядок быстрее. Я лишь говорю свое впечатление об этом framework. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 11:12 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
t00kukЕсть у меня ощущение, что всякие ОРМ, Майбатисы и жуки - они для тех, кто не может в SQL. Не, не, чувак, ты не прав. Об том и речь, что когда возникает сложный запрос, его как правило и пишут на голом SQL. Как справедливо подметил Blazkowicz, в MyBatis один сплошной SQL. Никогда не понимал так называемых народных умельцев, которые отвергают то, что дала им цивилизация. Просто надо разумно подходить к выбору технологии, а не кричать на каждом углу, что "J2EE forever!!!", "EJB - круть и вертели мы на х..ю ваши Spring'и", "Стандарт - лучше, чем нестандарт" и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 11:21 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
J2ee DeveloperЗря, зря.. MyBatis - рулит!!! Лично мне не влом писать вручную insert'ы и update'ы, если я при этом на 100% понимаю, как это работает. По мне JPA слишком сложен, и не облегчает жизнь программиста, а наоборот, её усложняет, до предела запутывая доменную модель, сложными ассоциациями. В то время как в MyBatis ты мапишь сам запрос на тот или иной домен. А мне было бы вром писать 100500 CRUD запросов для нескольких сотен сущностей. MyBatis, веротяно, рулит как инструмент интеграции Java/SQL. Но не решает кучу вопросов, которых хотелось бы отдать на уровень фреймверка. J2ee DeveloperПлюс, как правило в команде, не все разработчики являются гуру, а есть и junior'ы и middle'ы. По моему опыту даже многие senior'ы не до конца понимают, как работает jpa. No Comments по поводу такие "синьёров". Но, в целом, правда. Hibernate стал достаточно сложным инструментом с массой спефицичных фишек и подводных камней. А зоопарк JPA провайдеров делает всё только хуже. J2ee DeveloperПро быстродействие вообще молчу. Сложные селекты, так вообще просто ад. Какое отношение селекты имеют к производительности? Использовать SQL в сложных местах достаточно не сложно. А вот как решаются вопросы генерации динамических SQL в myBatis, было бы интересно узнать. J2ee DeveloperМое мнение, что JPA имеет смысл использовать только, когда нужна поддержка большого кол-ва разных СУБД, ну или для какой-нить админки, где производительность не критична, а нужен тупо CRUD. На счет поддержки разных СУБД это заблуждение. Портирование проета под другого SQL вендора это всегда большая задача вне зависимости от использования ORM. А вот на счет CRUD - верно. Это то самое в чем ORM подруливает очень сильно и кешами, и персистентными коллекциями, и dirty-check апдейтами. J2ee DeveloperПоймите правильно, а не отрицаю того факта, что и на MyBatis можно заговнокодить так, что оптимизированный JPA будет на порядок быстрее. Я лишь говорю свое впечатление об этом framework. Каждой задаче свой фреймверк. Но спорить сложно, с тем фактом что ORM далеко не все вопросы закрывает, даже если это такой продвинутый инструмент как Hibernate. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 11:28 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
BlazkowiczА мне было бы вром писать 100500 CRUD запросов для нескольких сотен сущностей. MyBatis, веротяно, рулит как инструмент интеграции Java/SQL. Но не решает кучу вопросов, которых хотелось бы отдать на уровень фреймверка. Какая разница, то-ли для тебя сгенерит CRUD запрос IDE, то ли ORM. Зато потом, можно любой запрос "допилить". BlazkowiczКаждой задаче свой фреймверк. Но спорить сложно, с тем фактом что ORM далеко не все вопросы закрывает, даже если это такой продвинутый инструмент как Hibernate. По моему опыту, ORM (Hibernate, OpenJPA) не сколько закрывает, сколько открывает кучу вопросов. Вместо того, чтобы "замапить" нужную сущность сразу из БД в объект, приходиться писать три слоя, чтобы перелить entity в в объект. По мне, написать пару запросов гораздо проще, чем реализовывать все слои для работы с Persistent Object. <:o) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 11:48 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
Blazkowiczt00kukЕсть у меня ощущение, что всякие ОРМ, Майбатисы и жуки - они для тех, кто не может в SQL. Согласен. ВАЗ 2101 - вещь. Все эти ваши "тойоты" и "форды" для тех кто не может коробку пересобрать. Рассуждения на уровне гаражного механика. Разные инструменты решают разные задачи. Кичится своим невежеством не прилично. myBatis так вообще один сплошной SQL. Я не кичусь невежеством, а высказываю свое ощущение, чтобы посмотреть комментарии более опытных товарищей. Мой опыт общения с ОРМ на данный момент скорее отрицательный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 11:48 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
t00kukЯ не кичусь невежеством, а высказываю свое ощущение, чтобы посмотреть комментарии более опытных товарищей. Мой опыт общения с ОРМ на данный момент скорее отрицательный. И вы его экстраполируете на все остальные вышеперечисленые фреймверки, которыйе ORM-ами, вобщем-то и не являются? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 11:51 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
если работать с базами - то JDBC лучше всего рулит. для начинающих - трудности в понимании sql, но это бысто проходит. минимум прослоек, максимум прозрачности. "многосубдовость" - не оправдание для применения прослоек. как ни крути, а для максиального быстродействия потребуется использовать все тонкости конкретной реализации каждой субд. для псевдо "многосубдовости" можно использовать хранимки, тогда не придется изменять код, только сами хранимки. но не во всех субд они есть... счас есть множество графисечких оболочек для написания/отработки запросов - очень удобно и быстро. и синтаксис подсказывают и пр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 12:01 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
вадяесли работать с базами - то JDBC лучше всего рулит. для начинающих - трудности в понимании sql, но это бысто проходит. минимум прослоек, максимум прозрачности. "многосубдовость" - не оправдание для применения прослоек. как ни крути, а для максиального быстродействия потребуется использовать все тонкости конкретной реализации каждой субд. для псевдо "многосубдовости" можно использовать хранимки, тогда не придется изменять код, только сами хранимки. но не во всех субд они есть... счас есть множество графисечких оболочек для написания/отработки запросов - очень удобно и быстро. и синтаксис подсказывают и пр. мне вообще надо простые запросы писать на выборку и добавление данных. и мне лучше использовать JDBC, запросы sql писать умею ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 13:11 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
Елдосмне вообще надо простые запросы писать на выборку и добавление данных. и мне лучше использовать JDBC, запросы sql писать умею Смотерть тут :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 13:18 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
Blazkowicz2) Массштабируемость. Даже если ваш сервер будет выдавать 50 000 запросов в час максимум. При хорошей масштабируемости вы тупо подымете второй такой сервер. И решите проблему роста. А если у вас сервер вадёт нужные 100 000, а завтра нужно 200 000 и он не масштабируется, это на много хуже. При этом, я хочу заметить, проблемы масштабируемости самой БД (сервера БД) никаким фреймворком никак не решается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 14:39 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
вадяесли работать с базами - то JDBC лучше всего рулит. для начинающих - трудности в понимании sql, но это бысто проходит. минимум прослоек, максимум прозрачности. "многосубдовость" - не оправдание для применения прослоек. Проблема sql не в его написании, а в его правке. Когда в сущность добавилось поле и надо найти все места в sql, в которых его надо добавить. Вот тогда начинается АДЪ. Потому что ошибка может вылезти только в одном редком случае, который и автотестами сложно покрыть, и ручными тестами никто не подумает проверять :D АДЪ ORM (hibernate) начинается в другом месте. Когда пытаешься работать со ссылками вне сессии. И тут либо вытаскиваешь кучу ненужного мусора, либо ВДРУГ получается LAZY-exception. Попытка рулить аннотациями часто приводит к перетягиванию одеяла- один вылечил LAZY - другое получил тормоза, и наоборот :D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 14:47 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
MasterZivПри этом, я хочу заметить, проблемы масштабируемости самой БД (сервера БД) никаким фреймворком никак не решается. Hibernate с простой возможностью подключение распределенного кеша второго уровня, как раз что-то решает. Просто умиляют пожелания "мне надо быстро и секурно" в комбинации с конкатенацией параметров SQL в строку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 14:58 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
относительно hibernate подскажите, правильно ли решение такого плана? Чтобы не подтягивать лишние связанные объекты при запросе через hibernate, я сделал так в entity-классе Код: java 1. 2. 3. и если мне надо получить какой-то объект который связан с Product я просто вытаскиваю его по productId а не через product Вроде как стало меньше тормозить, но! правильно ли такое решение. Я вообще особенно глубоко не изучал hibernate. Все решаю тогда, когда возникает текущая потребность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 15:06 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
Правильно всё, что приводит к счастью заказчика. Если работает и вы не видите недостатков - отлично. Если вы спрашиваете о подводных камнях такого решения, то их почти нет, разве что вам придется перебирать ваш entity в цикле, но в этом случае я думаю вы заметите лаги и перепишете:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 15:11 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
Nixic Код: java 1. 2. 3. А Lazy здесь точно работает? Ведь, без дополнительной инструментации\проксировании кода, Hibernate не сможет сделать свойство ленивым. Nixicи если мне надо получить какой-то объект который связан с Product я просто вытаскиваю его по productId а не через product Если ассоциация ленивая, то в product.id будет FK из текущей таблицы. И его чтение не приведет к запросу в product. Поэтому заводить дополнительное поле смысла нет. NixicВроде как стало меньше тормозить, но! правильно ли такое решение. Я вообще особенно глубоко не изучал hibernate. Все решаю тогда, когда возникает текущая потребность. Решение странное и на правильное не похоже. Для динамического управления ленивой ассоциацией fetch можно передать в запрос HQL или в Criteria API. Чтобы загрузить Product одним JOIN запросом. Что в вашем подходе невозможно. Вы сделали lazy ассоциацию чтобы ей никогда не пользоваться? В, целом, идея здравая и имеет право на жизнь, но в каком-то другом ORM. Не в Hibernate. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 15:18 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
авторПроблема sql не в его написании, а в его правке. Когда в сущность добавилось поле и надо найти все места в sql, в которых его надо добавить. Вот тогда начинается АДЪ. Потому что ошибка может вылезти только в одном редком случае, который и автотестами сложно покрыть, и ручными тестами никто не подумает проверять :D дельное замечание. только его актуальноть несколько попахивает :) по крайней мере в dbforge есть фича как рефакторинг- изменяешь в однм месте - ищет все хождения по всем объектам базы. изменил на базе разрабоки - сравнение структур - можно скопировать изменения на рабочую, тож самое и с данными. ЗЫ а если использовать хранимки - то исправления на 95% только в базе.. в чистом sql, а не в коде, где бывает трудно сам текст запроса выглядеть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 15:20 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
вадяавторПроблема sql не в его написании, а в его правке. Когда в сущность добавилось поле и надо найти все места в sql, в которых его надо добавить. Вот тогда начинается АДЪ. Потому что ошибка может вылезти только в одном редком случае, который и автотестами сложно покрыть, и ручными тестами никто не подумает проверять :D дельное замечание. только его актуальноть несколько попахивает :) по крайней мере в dbforge есть фича как рефакторинг- изменяешь в однм месте - ищет все хождения по всем объектам базы. изменил на базе разрабоки - сравнение структур - можно скопировать изменения на рабочую, тож самое и с данными. ЗЫ а если использовать хранимки - то исправления на 95% только в базе.. в чистом sql, а не в коде, где бывает трудно сам текст запроса выглядеть. Стоп. Я про sql в java. Как оно может решить, нужно ли в этом update добавить это поле и куда- в where или изменяемые поля? А хранимки- то же самое- добавил параметр в ханимку, а дальше что? А если он имеет значение по-умолчанию? ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 15:43 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
Alexey TominПроблема sql не в его написании, а в его правке. Когда в сущность добавилось поле и надо найти все места в sql, в которых его надо добавить. Вот тогда начинается АДЪ. Потому что ошибка может вылезти только в одном редком случае, который и автотестами сложно покрыть, и ручными тестами никто не подумает проверять :D Никакого ада. При правильной организации кода, все запросы будут лежат в одном месте и правиться простым Replace. Аналогично "маппирование" данных из БД на объекты. Хотя в начале надо будет "попотеть" написать все ручками. Зато потом добавление удаление полей производится быстро и легко. Alexey TominАДЪ ORM (hibernate) начинается в другом месте. Когда пытаешься работать со ссылками вне сессии. И тут либо вытаскиваешь кучу ненужного мусора, либо ВДРУГ получается LAZY-exception. Попытка рулить аннотациями часто приводит к перетягиванию одеяла- один вылечил LAZY - другое получил тормоза, и наоборот :D Там АДЪ начинается сразу, как только хочешь чуть большего чем "SELECT" с парой "JOIN"'ов. Если нужна новая сущность из запроса, то либо пишешь ХП (потом получая все приключения при изменении количества колонок), либо как-то пытаешься собрать из существующих (тормоза и пр.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2014, 07:56 |
|
||
|
Hibernate
|
|||
|---|---|---|---|
|
#18+
mad_nazgulТам АДЪ начинается сразу, как только хочешь чуть большего чем "SELECT" с парой "JOIN"'ов. Если нужна новая сущность из запроса, то либо пишешь ХП (потом получая все приключения при изменении количества колонок), либо как-то пытаешься собрать из существующих (тормоза и пр.) При правильной организации структуры каждый класс строго мапится на одну таблицу. Но если данные кривые- то спасают view (я как-то натягивал ORM на старую кривую структуру БД). Если совсем кривая схема БД- помогает триггеры и новая таблица. Или настроить Entity. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2014, 09:24 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38781481&tid=2126420]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
157ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 464ms |

| 0 / 0 |
