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

  • @dreamer_vi905
    @dreamer_vi9052 ай бұрын

    Очень хороший для восприятия контент. И вопросы поднимаются актуальные, есть вещи которые спрашивают на собеседовании. Лайк, подписка.

  • @jigoku9592
    @jigoku95925 ай бұрын

    На Ютубе очень много видео для новичков, но best practices для более продвинутых очень мало, спасибо за полезную информацию!❤

  • @kismichel17

    @kismichel17

    5 ай бұрын

    Спасибо, очень приятно ☺️ Значит, записываю не зря)

  • @xUngernx
    @xUngernx4 ай бұрын

    13 лет работаю с hibernate, и лучший совет это по возможности избегать его использование вообще! Преимущества которые он дает, не покрывают тонну проблем которые возникают в следствии не очень правильного его использования людьми которые не достаточно разбираются в его тонкостях, почти по каждой теме в этом ролике я на разных проэктах сталкивался с проблемами, плюс еще много таких о которых в ролике ничего не рассказывается.

  • @eduardklygunov1412
    @eduardklygunov14126 ай бұрын

    Спасибо огромное что освещаешь такие важные темы, лайк) Ждем следующих видео, надеюсь когда-нибудь дойдешь до микросервисов, кафки и т.д.

  • @user-lx4dc1ls3e
    @user-lx4dc1ls3e6 ай бұрын

    Михаил, тебе не стыдно быть таким умным?))))) Спасибо за видео👍👍👍

  • @kismichel17

    @kismichel17

    6 ай бұрын

    Стыжусь, но снимаю 😂

  • @evilroad36
    @evilroad366 ай бұрын

    Информативно и понятно все рассказываешь и показываешь, молодец. Давай теперь по Spring-у что нибудь запиши там тоже куча всяких камней.

  • @kismichel17

    @kismichel17

    6 ай бұрын

    Благодарю)

  • @marimari1808
    @marimari180819 күн бұрын

  • @user-un1um2vf3y
    @user-un1um2vf3y3 ай бұрын

    я бы отметил, что использование join fetch для решения проблемы с 1+N не является единственным и имеет свои минусы, особенно если большая сущность, в которой много ассоциация. в видео не описан другой популярный метод решения этой проблемы с использованием ГРАФОВ, этот подход тоже не решен своих минусов, но на мой взгляд является лучшим решением в сравнении с Join Fetch

  • @kismichel17

    @kismichel17

    3 ай бұрын

    Полностью согласен, в комментариях уже подмечали это, мне стоило хотя бы упомянуть графы Исправлюсь в одном из новых видео, спасибо за фидбек 🙏

  • @MrSurprise777
    @MrSurprise7776 ай бұрын

    Очень доходчиво и по полкам. Спасибо!

  • @milordplus
    @milordplus4 ай бұрын

    Ооочень круто!!! Спасибо огромное!

  • @user-yb5py1in1j
    @user-yb5py1in1j4 ай бұрын

    Большое спасибо за такое хорошее видео.

  • @user-iu6yz6ck6h
    @user-iu6yz6ck6h6 ай бұрын

    Очень круто! Спасибо большое за видео

  • @kismichel17

    @kismichel17

    6 ай бұрын

    Рад стараться)

  • @user-hu6cr1bt6z
    @user-hu6cr1bt6z6 ай бұрын

    Просто супер. Желаю успехов.

  • @kismichel17

    @kismichel17

    6 ай бұрын

    Спасибо за вашу поддержку 🙏

  • @dmaberlin
    @dmaberlin6 ай бұрын

    спасибо

  • @MrSashaZykov
    @MrSashaZykov3 ай бұрын

    Было бы отлично, на гитхабе получать код начала урока, а не конца. Но всё достаточно понятно, спасибо!

  • @kismichel17

    @kismichel17

    3 ай бұрын

    А классная идея, можно на разные ветки разделить начало/результат, спасибо, даже не думал об этом)

  • @egorsaprykin678
    @egorsaprykin6786 ай бұрын

    Спасибо за за видео, но есть вопрос по LazyInitializationException. Использование транзакции может повлиять на производительность, особенно в случае множественных запросов. Не лучше ли использовать снова использовать JOIN FETCH в запросах, чтобы инициировать загрузку ленивых свойств в момент выполнения запроса?

  • @kismichel17

    @kismichel17

    6 ай бұрын

    Насчет производительности сомнительно, запросы в любом случае выполнятся в транзакции, просто она будет создаваться новая на каждый запрос Но а вообще зависит от ситуации. Если ленивые поля нужны во всех кейсах, то и правда можно выгрузить сразу через join fetch

  • @unicoxr5tj417
    @unicoxr5tj4176 ай бұрын

    дарова. Девопсина или автотесты на канале?)

  • @Nikita-fn3dl
    @Nikita-fn3dl6 ай бұрын

    а как реализовать логику soft удаления при @Many-to-many associations, может быть сталкивался с таким? А так тема очень важная, спасибо за толковое разъяснение

  • @kismichel17

    @kismichel17

    6 ай бұрын

    Не сталкивался, но теперь узнал об этом, спасибо) Судя по этой статейке, можно разрулить аннотациями habr.com/ru/amp/publications/579386/

  • @user-xy4sv9cl6v
    @user-xy4sv9cl6v6 ай бұрын

    Такое чувство, что ты или бросил школу еще в 3 классе (примерно), либо попросту забыл свой родной язык. Просто противно слушать, когда человек не помнит такие слова, как "создание", "поток", и прочие...

  • @kismichel17

    @kismichel17

    6 ай бұрын

    Какой момент в видео так сильно возмутил?) Я за конструктив. Если правда косячу, буду исправляться

  • @user-eo2ti1qz6y

    @user-eo2ti1qz6y

    6 ай бұрын

    ты старый дед что ли? ворчишь тут

  • @milordplus

    @milordplus

    4 ай бұрын

    А вот мне показалось наоборот. Это редкий случай когда в видео минимальны всякие "эммм ааа типа короче... "Неплохо в данном случае учитывать, что это не зачитывание статьи, а живая речь. Ну и помимо хорошей речи, хотел бы подчеркнуть отсутствие всяких отвлекающих клацаний, кашля и тд. Михаил, ты крутой!

  • @jackledger2611

    @jackledger2611

    4 ай бұрын

    Он просто глупыш, а Вы Михаил не обращайте внимания