Посоветуйте тьюториал по Hibernate
От: Sinclair Россия https://github.com/evilguest/
Дата: 24.03.21 11:17
Оценка:
Мне нужно освоить современный уровень ORM под JVM.
Я так понял, что промышленным стандартом является Hibernate (если не прав — поправьте).
Но когда я в последний раз писал что-то на джаве, Хибер ещё писался в памперсы. Поэтому у меня с ним опыта нет.
Попробовал поискать тьюториалы гуглом — нет уверенности, что они адекватные. Как-то стрёмно код выглядит, хочется убедиться, что я не изучаю столетней давности версию
Заранее благодарен.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Посоветуйте тьюториал по Hibernate
От: vsb Казахстан  
Дата: 24.03.21 11:21
Оценка: 105 (1) +4
Здравствуйте, Sinclair, Вы писали:

S>Мне нужно освоить современный уровень ORM под JVM.

S>Я так понял, что промышленным стандартом является Hibernate (если не прав — поправьте).
S>Но когда я в последний раз писал что-то на джаве, Хибер ещё писался в памперсы. Поэтому у меня с ним опыта нет.
S>Попробовал поискать тьюториалы гуглом — нет уверенности, что они адекватные. Как-то стрёмно код выглядит, хочется убедиться, что я не изучаю столетней давности версию
S>Заранее благодарен.

https://hibernate.org/orm/documentation/5.4/ ? Лично я всегда User Guide смотрю по нужным вопросам, но у меня некоторое знакомство с ним уже есть. Ещё посоветую mkyong.com шикарный сайт, по всем вопросам, связанным с Java там есть качественные материалы.

Насчёт промышленного стандарта — у меня такое ощущение, что многие пользуются простыми библиотеками вроде Spring JDBC, jOOQ, JDBI и тд. А ORM-решения в Java-мире имеют определённую плохую славу (имхо из-за пресловутого Hibernate). Но может быть ошибаюсь.
Отредактировано 24.03.2021 11:23 vsb . Предыдущая версия . Еще …
Отредактировано 24.03.2021 11:22 vsb . Предыдущая версия .
Re[2]: Посоветуйте тьюториал по Hibernate
От: Cheblin2 Китай https://github.com/cheblin
Дата: 24.03.21 11:30
Оценка: 70 (1) +1
Здравствуйте, vsb, Вы писали:


vsb> многие пользуются простыми библиотеками вроде Spring JDBC, jOOQ, JDBI и тд.


согласен. JOOQ лучший
Отредактировано 24.03.2021 11:31 Cheblin2 . Предыдущая версия .
Re[2]: Посоветуйте тьюториал по Hibernate
От: Pavel Dvorkin Россия  
Дата: 24.04.21 14:46
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Насчёт промышленного стандарта — у меня такое ощущение, что многие пользуются простыми библиотеками вроде Spring JDBC, jOOQ, JDBI и тд.


Хм, а как на этих простых решениях классы с коллекциями потом делать ? Ну получим мы результат SELECT — JOIN, а разбирать его на Parent — List<Child> потом вручную ?

>А ORM-решения в Java-мире имеют определённую плохую славу (имхо из-за пресловутого Hibernate). Но может быть ошибаюсь.


Возможно. Кстати, есть MyBatis — SQL он в отличие от Hibernate не генерирует, но в класс и его коллекции маппит.
With best regards
Pavel Dvorkin
Re[3]: Посоветуйте тьюториал по Hibernate
От: vsb Казахстан  
Дата: 24.04.21 15:04
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

vsb>>Насчёт промышленного стандарта — у меня такое ощущение, что многие пользуются простыми библиотеками вроде Spring JDBC, jOOQ, JDBI и тд.


PD>Хм, а как на этих простых решениях классы с коллекциями потом делать ? Ну получим мы результат SELECT — JOIN, а разбирать его на Parent — List<Child> потом вручную ?


Обычно в каждом варианте есть какие-то решения для простых случаев. Например для Spring JDBC есть примеры тут (BeanPropertyRowMapper). Именно Parent — List<Child> наверное придётся вручную, но просто поля промаппить можно быстро. В целом да, готовиться вручную каждое поле ставить, в общем случае это так.

>>А ORM-решения в Java-мире имеют определённую плохую славу (имхо из-за пресловутого Hibernate). Но может быть ошибаюсь.


PD>Возможно. Кстати, есть MyBatis — SQL он в отличие от Hibernate не генерирует, но в класс и его коллекции маппит.


Да, это тоже нормальный вариант, есть опыт использования.
Отредактировано 24.04.2021 15:05 vsb . Предыдущая версия . Еще …
Отредактировано 24.04.2021 15:04 vsb . Предыдущая версия .
Re: Посоветуйте тьюториал по Hibernate
От: gyraboo  
Дата: 24.04.21 15:11
Оценка: 74 (1) +1
Здравствуйте, Sinclair, Вы писали:

S>Мне нужно освоить современный уровень ORM под JVM.

S>Я так понял, что промышленным стандартом является Hibernate (если не прав — поправьте).
S>Но когда я в последний раз писал что-то на джаве, Хибер ещё писался в памперсы. Поэтому у меня с ним опыта нет.
S>Попробовал поискать тьюториалы гуглом — нет уверенности, что они адекватные. Как-то стрёмно код выглядит, хочется убедиться, что я не изучаю столетней давности версию
S>Заранее благодарен.

Достаточно полное и хорошее описание Хибера на русском языке в книге:
https://javarush.ru/groups/posts/498-hibernate-dlja-chaynikov-obzor-knigi-java-persistence-api-i-hibernate

JPA неплохо ещё у Гонзалвеса описан, с него можно начать, т.к. книга что выше немного тяжелее читается:
https://www.labirint.ru/books/444058

Но как верно отметили, кроме Хибера в Джаве есть и другие ORM. MyBatis, Jooq.
С MyBatis я несколько лет работал, и мне он не понравился, у него есть ряд нерешенных проблем, которые серьезно ограничивают разработчика.
Мне кажется, Хибер — самая зрелая технология.
Re[4]: Посоветуйте тьюториал по Hibernate
От: gyraboo  
Дата: 24.04.21 15:13
Оценка:
Здравствуйте, vsb, Вы писали:

PD>>Возможно. Кстати, есть MyBatis — SQL он в отличие от Hibernate не генерирует, но в класс и его коллекции маппит.


vsb>Да, это тоже нормальный вариант, есть опыт использования.


Вот именно что "нормальный". При попытке использовать его более продвинуто или гибко начинаются всякие неприятные препоны. Если проект планируется вывести на серьезный уровень, лучше обходить MyBatis стороной.
Re: Посоветуйте тьюториал по Hibernate
От: scf  
Дата: 04.05.21 06:19
Оценка: +1 -1
Здравствуйте, Sinclair, Вы писали:

S>Мне нужно освоить современный уровень ORM под JVM.


Современный уровень — полноценные ORM с контролем модификации объектов (JPA/Hibernate) применяют в RAD проектах или проектах с неквалифицированными разработчиками. Причина — высокая сложность, высокая хрупкость, ограниченное быстродействие.

Качественные проекты пишут без ORM на JDBC, простых обертках над ним (spring jdbctemplate), или на JOOQ
Re: Посоветуйте тьюториал по Hibernate
От: scf  
Дата: 04.05.21 06:52
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Попробовал поискать тьюториалы гуглом — нет уверенности, что они адекватные. Как-то стрёмно код выглядит, хочется убедиться, что я не изучаю столетней давности версию


Не совсем тьюториал, но прочтение сверху вниз мне в своё время значительно помогло быстро освоить хибернейт.
https://docs.jboss.org/hibernate/stable/orm/userguide/html_single/Hibernate_User_Guide.html
Re[2]: Посоветуйте тьюториал по Hibernate
От: gyraboo  
Дата: 04.05.21 07:23
Оценка:
Здравствуйте, scf, Вы писали:

S>>Мне нужно освоить современный уровень ORM под JVM.


scf>Современный уровень — полноценные ORM с контролем модификации объектов (JPA/Hibernate) применяют в RAD проектах или проектах с неквалифицированными разработчиками. Причина — высокая сложность, высокая хрупкость, ограниченное быстродействие.


"высокая сложность, высокая хрупкость, ограниченное быстродействие" чего именно?
Re[3]: Посоветуйте тьюториал по Hibernate
От: scf  
Дата: 04.05.21 07:27
Оценка:
Здравствуйте, gyraboo, Вы писали:

G>"высокая сложность, высокая хрупкость, ограниченное быстродействие" чего именно?


Hibernate, конечно. Впрочем, EclipseLink ненамного лучше.
Re[4]: Посоветуйте тьюториал по Hibernate
От: gyraboo  
Дата: 04.05.21 07:40
Оценка: +1
Здравствуйте, scf, Вы писали:

G>>"высокая сложность, высокая хрупкость, ограниченное быстродействие" чего именно?


scf>Hibernate, конечно. Впрочем, EclipseLink ненамного лучше.


А в чём тогда логика твоего тезиса? "высокая сложность, высокая хрупкость, ограниченное быстродействие" — *причины* использования JPA (Hiber, EclipseLink)?
Я согласен с тем, что правильно готовить Hiber, чтобы он летал и работал правильно, не так просто, нужно изучать книги, сталкиваться с подводными камнями. Но и JDBC без тюнинга и без понимания механизмов БД тоже будет тормозить (если не использовать индексы или везде лепить join) или будет ненадежным решением (например, если не использовать или неправильно использовать транзакции).
Поэтому правильно приготовленный Hiber не так уж сильно будет отставать от JDBC, но выигрывать в удобстве сопровождения кода (т.е. кода писать и поддерживать придется меньше чем на jdbc, и велосипедов будет меньше чем придется их писать на jdbc, т.к. у хибера (плюс спринг конечно) многое из коробки) при масштабировании кодовой базы, когда эталонные решения с хибером на проекте уже проработаны.
Отредактировано 04.05.2021 7:42 gyraboo . Предыдущая версия .
Re[5]: Посоветуйте тьюториал по Hibernate
От: scf  
Дата: 04.05.21 07:51
Оценка:
Здравствуйте, gyraboo, Вы писали:

G>Поэтому правильно приготовленный Hiber не так уж сильно будет отставать от JDBC, но выигрывать в удобстве сопровождения кода


Я видел много неудачных примеров использования хибера, и мало — удачных. Причем удачные — поголовно с компактной кодовой базой и низкой нагрузкой. Причем, по моему опыту, сопровождение кода — это главнейшая проблема хибернейта, т.к. изменение маппингов один-ко-многим, ленивость и флаши могут легко сломать код или привести к неоптимальным запросам в базу.
Re[6]: Посоветуйте тьюториал по Hibernate
От: gyraboo  
Дата: 04.05.21 07:55
Оценка: +1
Здравствуйте, scf, Вы писали:

G>>Поэтому правильно приготовленный Hiber не так уж сильно будет отставать от JDBC, но выигрывать в удобстве сопровождения кода


scf>Я видел много неудачных примеров использования хибера, и мало — удачных. Причем удачные — поголовно с компактной кодовой базой и низкой нагрузкой. Причем, по моему опыту, сопровождение кода — это главнейшая проблема хибернейта, т.к. изменение маппингов один-ко-многим, ленивость и флаши могут легко сломать код или привести к неоптимальным запросам в базу.


Если у разрабов нет экспертизы видеть такие проблемы и уметь их решать, имхо голый JDBC их не сильно спасёт.
Re: Посоветуйте тьюториал по Hibernate
От: Cyberax Марс  
Дата: 04.05.21 08:54
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Мне нужно освоить современный уровень ORM под JVM.

S>Я так понял, что промышленным стандартом является Hibernate (если не прав — поправьте).
Hibernate + http://www.querydsl.com/ — всё по туториалам можно просто начать использовать.
Sapienti sat!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.