Что важно знать
- ORM отображает строки на объекты и избавляет от рутины, но SQL под ним никуда не исчезает — его нужно видеть в логах.
- N+1: загрузили список, а связанные сущности подгружаются по одной. Лечится JOIN FETCH, entity graph, пакетной загрузкой.
- Persistence context: кэш первого уровня, отслеживание изменений, сброс при коммите.
- Ленивая загрузка вне транзакции — LazyInitializationException и аналоги.
- Отчёты и сложные выборки — часто лучше SQL или проекции.