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
Каждый новый уровень скрывает (абстрагирует) детали низлежащего.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости