Spring Data JPA – это не реализация JPA, это абстракция доступа к данным БД.
Не могу понять этого выражения в сфере сравнения с реализацией JPA
(допустим Hibernate
). При использовании Spring Data JPA
, для использования CRUD
операций необходимо наследоваться от интерфейса CrudRepository
, но без Hibernate
Spring Data JPA
самостоятельно работать не может, так как он не умеет трансформировать java объект в сущности. НО! Hibernate
может и сам выполнять CRUD
операции. Итого, вопросы:
Как я могу пока ответить на эти вопросы:
Давайте разбираться по порядку.
JPA
(Java Persistence API
) - Спецификация, которая объясняет как записывать, читать и управлять данными, которые представленны в виде Java
объектов в реляционных базах данных.
Hibernate
- Предоставляет одну из реализаций спецификации JPA
, т.е. он умеет переводить Java
объекты в записи реляционной таблицы, создавать запросы по записи, чтению и управлению данными.
Spring Data JPA
- часть библиотеки Spring
, которая предоставляет дополнительный уровень абстракции, чтобы сократить количество одинакового кода, например такого, как работа с EntityManager
.
Суммируя написанное выше, подведём, что Hibernate
это реализация JPA
спецификации, в то время как Spring Data JPA
предоставляет ещё один уровень абстракции, над JPA
.
Для того, чтобы писать меньше кода, так как репозитории способны сгенерировать код, под необходимый запрос. Отпадает необходимость тащить тот же EntityManager
и писать запросы вида:
public List<Smth> findAll() {
return session.createQuery("SELECT a FROM Smth a", Smth.class).getResultList();
}
когда в репозитории этот же код выглядит следующим образом:
public interface SmthRepository extends JpaRepository<Smth, Long> {
List<Smth> findAll();
}
Spring
генерирует код на основе названия и сигнатуре методов интерфейсе, иногда ему можно помочь сгенерировать правильный запрос с помощью аннотации @Query
.
Да, как подметил @Sergey Gornostaev, 1 и 3 вопросы одинаковые.
Как было сказано в ответе 2, генерация происходит по имени и сигнатуре метода.
Стандартная матрёшка абстракций
Spring Data
|
JPA
|
JDBC
Каждый новый уровень скрывает (абстрагирует) детали низлежащего.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пробую высветлить несколько маркеров на карте но не понимаю как правильно создать запрос к Json помогите пожалуста
Хочу чтобы из места обозначенного комментарием //это место "перекинуло" в цикл обозначенного //этот цикл, при том, что они находятся в разных...