Как разработчик Hibernate, я тоже хорошо разбираюсь в SQL;) Фактически, начало моей карьеры работало исключительно с реляционными (и даже с некоторыми реляционными) базами данных. Во всяком случае, я действительно не понимаю это неправильное представление о том, что письмо, написанное SQL, «более обслуживаемо» или дает «лучший контроль». Но если вы купите это неправильное представление, вы можете фактически сказать Hibernate SQL, который вы хотите использовать для всех операций CRUD, относящихся к каждому объекту (см. @SQLInsert
, @SQLUpdate
и т. Д.).
Опять же, я нахожу, что это почти не поддерживается. Лично я бы предпочел, чтобы Hibernate управлял INSERT/UPDATE/DELETE SQL для меня. Загрузка данных с другой стороны - это ситуация, когда я обычно хочу немного больше контролировать. Но Hibernate (и поставщики JPA в целом) уже дают вам такой контроль через запросы HQL/JPQL и Criteria. На мой взгляд, если вы полагаетесь на Session.get, вы просто просите о плохой производительности. И это не имеет никакого отношения к использованию O/RM. Это не очень хороший план загрузки данных, потому что объем данных, которые вам нужны (даже связанные с одним и тем же объектом), различен на основе использования приложения.Например, для загрузки Employees для раскрывающегося списка требуется много разных данных для создания реестров ведомств. И это контроль.
Обязательно используйте то, что вам больше всего подходит и соответствует целям/требованиям приложения. Просто убедитесь, что ваши точки сравнения между технологиями и продуктами являются фактическими, а не просто заблуждением.
Кэширование - это справедливая точка относительно O/RM. Фактически JPA (начиная с версии 2.0) требует некоторого уровня кэширования. Однако имейте в виду, что кеширование на уровне O/RM часто приводит к ухудшению производительности. Вам действительно нужно понять семантику конкретных данных, которые вы хотели бы кэшировать. Некоторые данные являются хорошим кандидатом для кэширования, некоторые - нет. Кроме того, гораздо лучше кэшировать «выше» уровня O/RM.
Лично я бы выбрал Hibernate, потому что я верю (1), он поражает лучший баланс между абстракцией, все еще предоставляя доступ к силе SQL (это в основном относится к поставщикам JPA в целом) и (2) имеет самую полную функцию набор любого поставщика устойчивости.
Кэширование может быть независимым от технологии ORM. –