Мне трудно решить, следует ли мне придерживаться Hibernate для нового проекта или попробовать JPA и новую реализацию Spring Data.
Фреймворк Spring Data предназначен для крупных проектов или небольших проектов со скромными требованиями к запросам?
Хотя я определенно вижу преимущество сокращения кода за счет использования @Query
аннотации, что вы делаете для динамических запросов? А как насчет того, чтобы реализовать довольно сложный метод save ()?
В документации говорится о создании пользовательского интерфейса и реализации, которые реализует ваш основной репозиторий, но что, если вам нужно получить доступ к любым супер-методам в самом репозитории crud? Репозиторий crud реализует пользовательский, а не наоборот. Похоже на странный дизайн.
Я очень не уверен, сможет ли этот фреймворк решать задачи сложных и больших приложений. Я никогда не сталкивался со многими проблемами с Hibernate, и я подумываю придерживаться старого доброго надежного, а не использовать Spring Data JPA.
Что я должен делать? С какими непредвиденными осложнениями и расходами я столкнусь, если буду использовать Spring Data JPA?
Ответы:
Итак,
spring-data
делает некоторую дополнительную магию, которая помогает со сложными запросами. Сначала это странно, и вы полностью пропускаете это в документации, но это действительно мощно и полезно.Он включает в себя создание пользовательского
Repository
и пользовательского `RepositoryImpl 'и указание Spring, где его найти. Вот пример:Класс конфигурации -
укажите на все еще необходимую конфигурацию xmlс аннотацией, указывающей на ваш пакет репозиториев (*Impl
теперь он автоматически ищет классы):jpa-repositories.xml - скажите,Spring
где найти свои репозитории. Также скажитеSpring
искать собственные репозитории сCustomImpl
именем файла:MyObjectRepository
- здесь вы можете поместить аннотированные и неаннотированные методы запроса. Обратите внимание, как этот интерфейс репозитория расширяет егоCustom
:MyObjectRepositoryCustom
- методы репозитория, которые являются более сложными и не могут быть обработаны простым запросом или аннотацией:MyObjectRepositoryCustomImpl
- где вы фактически реализуете эти методы с помощью autowiredEntityManager
:Удивительно, но все это собрано вместе, и методы из обоих интерфейсов (и интерфейса CRUD, который вы реализуете) все появляются, когда вы это делаете:
Ты увидишь:
Это действительно работает. И вы получаете один интерфейс для запросов.
spring-data
действительно готов для большого приложения. И чем больше запросов вы можете вставить в простые или аннотационные, тем лучше для вас.Все это задокументировано на сайте Spring Data Jpa .
Удачи.
источник
JpaRepository
->MyJpaRepository
. Вы также должны создать,MyJpaRepositoryFactoryBean
но если вы все настроите правильно, вы можете переопределить метод .save (). Вот документы Spring Data JPA: static.springsource.org/spring-data/data-jpa/docs/current/… Не сдавайтесь!Я использовал Spring Data JPA в малых и больших проектах с простыми запросами. Главное преимущество - отсутствие необходимости использовать
@Query
аннотацию. В Spring Data нет ничего, что мешало бы вам использовать его в больших проектах, и недавняяQueryDSL
поддержка может вам помочь. Это пример использования QueryDSL для Hibernate.Если вы предвидите сложные запросы и чувствуете себя комфортно, используя объекты Hibernate без JPA, я думаю, что альтернативной комбинацией может быть простая Spring Data
Repository
рядом со сложными на основе Hibernate с конкретными методами, которые могут вам понадобиться. Возможно, это будет менее громоздко, чем превращение реализации Hibernate в структуру Spring Data JPA.источник
Spring JPA предоставит вам много абстракций от написания SQL и даже немного HQL с использованием объявления метода запроса. Spring JPA сияет своей генерацией запросов, но если вам нужно чисто спящее решение, вы можете настроить его по мере необходимости, поскольку Spring JPA по-прежнему основан на спящем режиме. Дополнительную информацию см. В документации http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html .
источник