Hibernate. Подводные камни и как их избежать
N+1, Entity + Lombok, Dirty checking и LazyInitializationException - 4 всадника апокалипсиса, которые могут погубить производительность вашего приложения. Смотри видео и используй Hibernate с умом)
Ссылка на проект
github.com/kismichel17/proble...
0:00 Начало
00:31 Обзор структуры тестового проекта
05:06 N+1 при выгрузке коллекций сущностей со связью one-to-many. FetchMode.SUBSELECT
09:21 N+1 при выгрузке списка сущностей со связью many-to-one. Join fetch
14:06 Подводные камни использования аннотаций Lombok с entity
18:48 Dirty checking
20:35 LazyInitializationException
22:52 Финалочка
Пікірлер: 38
Очень хороший для восприятия контент. И вопросы поднимаются актуальные, есть вещи которые спрашивают на собеседовании. Лайк, подписка.
На Ютубе очень много видео для новичков, но best practices для более продвинутых очень мало, спасибо за полезную информацию!❤
@kismichel17
5 ай бұрын
Спасибо, очень приятно ☺️ Значит, записываю не зря)
13 лет работаю с hibernate, и лучший совет это по возможности избегать его использование вообще! Преимущества которые он дает, не покрывают тонну проблем которые возникают в следствии не очень правильного его использования людьми которые не достаточно разбираются в его тонкостях, почти по каждой теме в этом ролике я на разных проэктах сталкивался с проблемами, плюс еще много таких о которых в ролике ничего не рассказывается.
Спасибо огромное что освещаешь такие важные темы, лайк) Ждем следующих видео, надеюсь когда-нибудь дойдешь до микросервисов, кафки и т.д.
Михаил, тебе не стыдно быть таким умным?))))) Спасибо за видео👍👍👍
@kismichel17
6 ай бұрын
Стыжусь, но снимаю 😂
Информативно и понятно все рассказываешь и показываешь, молодец. Давай теперь по Spring-у что нибудь запиши там тоже куча всяких камней.
@kismichel17
6 ай бұрын
Благодарю)
❤
я бы отметил, что использование join fetch для решения проблемы с 1+N не является единственным и имеет свои минусы, особенно если большая сущность, в которой много ассоциация. в видео не описан другой популярный метод решения этой проблемы с использованием ГРАФОВ, этот подход тоже не решен своих минусов, но на мой взгляд является лучшим решением в сравнении с Join Fetch
@kismichel17
3 ай бұрын
Полностью согласен, в комментариях уже подмечали это, мне стоило хотя бы упомянуть графы Исправлюсь в одном из новых видео, спасибо за фидбек 🙏
Очень доходчиво и по полкам. Спасибо!
Ооочень круто!!! Спасибо огромное!
Большое спасибо за такое хорошее видео.
Очень круто! Спасибо большое за видео
@kismichel17
6 ай бұрын
Рад стараться)
Просто супер. Желаю успехов.
@kismichel17
6 ай бұрын
Спасибо за вашу поддержку 🙏
спасибо
Было бы отлично, на гитхабе получать код начала урока, а не конца. Но всё достаточно понятно, спасибо!
@kismichel17
3 ай бұрын
А классная идея, можно на разные ветки разделить начало/результат, спасибо, даже не думал об этом)
Спасибо за за видео, но есть вопрос по LazyInitializationException. Использование транзакции может повлиять на производительность, особенно в случае множественных запросов. Не лучше ли использовать снова использовать JOIN FETCH в запросах, чтобы инициировать загрузку ленивых свойств в момент выполнения запроса?
@kismichel17
6 ай бұрын
Насчет производительности сомнительно, запросы в любом случае выполнятся в транзакции, просто она будет создаваться новая на каждый запрос Но а вообще зависит от ситуации. Если ленивые поля нужны во всех кейсах, то и правда можно выгрузить сразу через join fetch
дарова. Девопсина или автотесты на канале?)
а как реализовать логику soft удаления при @Many-to-many associations, может быть сталкивался с таким? А так тема очень важная, спасибо за толковое разъяснение
@kismichel17
6 ай бұрын
Не сталкивался, но теперь узнал об этом, спасибо) Судя по этой статейке, можно разрулить аннотациями habr.com/ru/amp/publications/579386/
Такое чувство, что ты или бросил школу еще в 3 классе (примерно), либо попросту забыл свой родной язык. Просто противно слушать, когда человек не помнит такие слова, как "создание", "поток", и прочие...
@kismichel17
6 ай бұрын
Какой момент в видео так сильно возмутил?) Я за конструктив. Если правда косячу, буду исправляться
@user-eo2ti1qz6y
6 ай бұрын
ты старый дед что ли? ворчишь тут
@milordplus
4 ай бұрын
А вот мне показалось наоборот. Это редкий случай когда в видео минимальны всякие "эммм ааа типа короче... "Неплохо в данном случае учитывать, что это не зачитывание статьи, а живая речь. Ну и помимо хорошей речи, хотел бы подчеркнуть отсутствие всяких отвлекающих клацаний, кашля и тд. Михаил, ты крутой!
@jackledger2611
4 ай бұрын
Он просто глупыш, а Вы Михаил не обращайте внимания