4 ответов:
Hibernate-это реализация JPA, в то время как Spring Data JPA-это абстракция доступа к данным JPA. Spring Data предлагает решение для
GenericDaoпользовательские реализации. Он также может генерировать запросы JPA от вашего имени с помощью соглашений об именах методов.с весенними данными вы можете использовать Hibernate, Eclipse Link или любого другого поставщика JPA. Очень интересным преимуществом является то, что вы можете управлять границами транзакций декларативно с помощью
@Transactionalаннотация.Spring JDBC гораздо более легкий, и он предназначен для собственных запросов, и если вы собираетесь использовать только JDBC, то вам лучше использовать Spring JDBC для решения многословия JDBC.
есть 3 различных вещи, которые мы используем здесь:
- JPA: Java persistence api, которые предоставляют спецификацию для сохранения, чтения, управления данными из вашего объекта java в отношения в базе данных.
- Hibernate: существуют различные провайдеры, которые реализуют jpa. Спящий режим-один из них. Так что у нас есть и другой поставщик. Но если вы используете jpa с spring, это позволяет вам в будущем переключаться на разных поставщиков.
- весенние данные JPA : это еще один слой поверх СПД, которые приходят, чтобы сделать вашу жизнь проще.
так давайте разберемся как весенние данные jpa и spring + hibernate работает-
весенние данные JPA:
допустим, вы используете spring + hibernate для вашего приложения. Теперь вам нужно иметь интерфейс dao и реализацию, где вы будете писать операцию crud, используя SessionFactory из hibernate. Допустим, вы пишете класс dao для класса Employee завтра в вашем приложении вам может потребоваться написать аналогичную операцию crud для любого другого объекта. Так что есть много шаблонного кода, который мы можем увидеть здесь.
теперь Spring data jpa позволяет нам определять интерфейсы dao, расширяя свои репозитории (crudrepository, jparepository), поэтому он предоставляет вам реализацию dao во время выполнения. Вам больше не нужно писать реализацию dao.Вот как spring data jpa делает вашу жизнь легкой.
Я не согласен SpringJPA делает жить легко. Да, он предоставляет некоторые классы, и вы можете сделать некоторые простые DAO быстро, но на самом деле, это все, что вы можете сделать. Если вы хотите сделать что-то большее, чем findById() или сохранить, вы должны пройти через ад:
- нет доступа к EntityManager в организации.springframework.данные.классы репозитория (это базовый класс JPA!)
- собственное управление транзакциями (hibernate транзакции запрещены)
- огромные проблемы с более чем одним источником данных конфигурация
- нет пула источников данных (HikariCP должен использоваться в качестве сторонней библиотеки)
Почему собственное управление транзакциями-это недостаток? Поскольку Java 1.8 позволяет использовать методы по умолчанию в интерфейсах, транзакции на основе аннотаций Spring, simple не работает.
к сожалению, SpringJPA основан на отражениях, и иногда вам нужно указать имя метода или пакет сущности в аннотации (!). Вот почему любой рефакторинг делает большой крах. Грустно, @Transactional работает только для первичных DS: (так что, если у вас есть более одного источника данных, помните - транзакции работают только для первичного :)
каковы основные различия между Hibernate и Spring Data JPA?
спящий режим совместим с JPA, springjpa Spring compatibile. Ваш HIBERNATEJPA DAO может использоваться с JavaEE или Hibernate Standalone, когда SpringJPA может использоваться в Spring-SpringBoot, например
когда не следует ли использовать Hibernate или Spring Data JPA? Кроме того, когда шаблон Spring JDBC может работать лучше, чем Hibernate / Spring Data JPA?
используйте Spring JDBC только тогда, когда вам нужно использовать много соединений или когда вам нужно использовать Spring с несколькими подключениями к источникам данных. Как правило, избегайте JPA для соединений.
но мой общий совет, используйте свежий раствор-Daobab (http://www.daobab.io). Daobab-это Java и любой интегратор JPA engine, и он очень поможет вам задачи:)
Hiternate является осуществление "СПД", который представляет собой спецификацию для Java-объектов в базе данных
Я бы рекомендовал использовать w.r.t jpa, поскольку вы можете переключаться между различными ОРМ.
когда вы используете JDBC, то вам нужно использовать SQL-запросы - если вы опытный, то перейти на JDBC
Comments