Феномен Hibernate
По названию можно догадаться, что Hibernate имеет полное право иногда впадать в спячку, но никого это не останавливает. Большинство обучающих материалов по Spring радостно знакомят новичков с JPA, внутри которого оказывается Hibernate. Полученные знания перетекают в новые проекты, потихоньку добавляются новые аннотации, разработчики начинают обмениваться опытом. Если возникают какие-то проблемы, то их решают более углублённым изучением Hibernate.
Над примитивным SQL возникает толстенная прослойка, в которой уже далеко не все хорошо разбираются. Энтузиасты используют разные возможности библиотеки и код становиться всё более запутанным. В большом проекте банальную аннотацию @Transactional может потребоваться поставить сотни раз. При регулярной ротации разработчиков через несколько лет запросто может оказаться, что эти аннотации раскиданы по коду случайным образом.
В результате не хватает соединений с базой, данные начинают грузиться в память мегабайтами на ровном месте, приложения тормозят и падают в проде. Да, если использовать примитивные JdbcTemplate и TransactionTemplate, то нужно будет написать больше кода. Но типичные ошибки в SQL выявляются с первого ручного теста и исправляются очень легко. Эффект от экономии труда по написании SQL несоизмерим с теми проблемами, которые появляются из-за неумелого применения Hibernate. Идея о том, что можно нанять правильных разработчиков, которые будут правильно применять Hibernate представляется мне полностью оторванной от ситуации на рынке труда.
Болле того, Hibernate не даёт возможности использовать специфические возможности разных баз данных, например, поддержку JSON в PostgreSQL. Если нужно оптимизировать скорость загрузки данных, то часто это легче сделать руками, чем подобрать в Hibernate правильные аннотации. Но если уже всё написано на Hibernate, то слезть с него довольно тяжело и проекты продолжают страдать.
Конечно, если Hibernate уже много лет используется и никаких проблем с ним не возникает, то нет повода что-то менять. Но если что-то уже поломалось или есть возможность эффективно использовать возможности базы, которые через Hibernate не видны, то есть мотивация для решительного рефакторинга. И уж точно не стоит тащить Hibernate в новые проекты или микросервисы.