Связь между JPA, Spring data jpa и Hibernate

209
26 октября 2019, 09:00

Hibenate - одна из реализация JPA. JPA - это только спецификация. Много где написано: JPA - это только спецификация, она не умеет сохранять, выбирать, удалять данные из таблицы. Для этого существуют реализации (такие как Hibernate). Ну вот сейчас я создаю приложение с помощью Spring Boot. Для взаимодействия c БД я использую CRUD репозиторий (который является частью spring data jpa). Так вот вопросы. 1. Использование CRUD репозитория каким-то боком вообще касается Hibenate? 2. Может ли spring data jpa использоваться без Hibenate вообще. 3. Не могу понять разницы реализации JPA и абстракции доступа к данным JPA.

Answer 1

Hibernate это библиотека используемая для выполнения преобразования объектов к структурам данных реляционных БД и наоборот, что в оригинале называется ORM (Object/Relational Mapping). Обычно одному классу объектов сопоставляется одна таблица в БД, поля объекта сопоставляются к колонкам таблицы, связь между объектами в базе данных сохраняется посредством использования ключей (Primary Key/Foreign Key). Многие правила преобразования применяются автоматически библиотеками ORM, а другие необходимо описать программисту, чтобы ORM "знал" как осуществлять преобразование. В Hibernate раньше такую информацию описывали в XML, позднее появился Java Persistence API (JPA). JPA это стандартизированный программный интерфейс (API) позволяющий задать информацию необходимую для осуществления преобразования объектов к модели реляционных БД посредством аннотаций языка Java, а также там описаны интерфейсы объектов предназначенных для выполнения Create, Read, Update, Delete (CRUD) операций с БД. То есть, раньше каждая ORM библиотека предлагала свои собственные способы описания сопоставления объектов таблицам, а также механизмы для выполнения CRUD операций, а JPA привнес унификацию. Мне известны две реализации JPA, это Hibernate и EclipseLink.

Spring Data содержит логику позволяющую абстрагироваться от конкретных БД, например для типичных CRUD операций там есть CrudRepository позволяющий выполнять большинство типовых операций с практически любыми базами данных(реляционными и не реляционными).

А теперь конкретно ответы на твои вопросы:

  1. Create, Read, Update, Delete (CRUD) это операции над данными хранимыми в БД. Hibernate это библиотека используемая для преобразования объектной модели к реляционной модели.
  2. Spring Data можно использовать без Hibernate, но сам по себе Spring Data не умеет преобразовывать объекты в структуры данных БД.
  3. JPA - это API, он содержит интерфейсы EntityManager, EntityTransaction и т.д., аннотации такие как @Id, @Column, @ManyToMany и прочие. Помимо интерфейсов JPA определяет поведение реализаций описанное в документации. Реализации этого API содержат логику реализующую интерфейсы JPA и выполняющие операции над данными не противореча документации этого API.
Answer 2
  1. Да, Spring Data JPA под капотом использует реализацию JPA, обычно Hibernate.
  2. Может использоваться с другой реализацией, типа EclipseLink или DataNucleus.
  3. Спецификация автотранспортного средства: Должно иметь двигатель, кузов, четыре колеса, руль и педали, при нажатии на педаль газа ускоряться, при нажатии на педаль тормоза останавливаться, при поворотах руля поворачивать в соответствующую сторону. Реализации спецификации: ВАЗ-2101, Lamborghini Gallardo, Tesla Model 3, Caterpillar 797b. Так же спецификация JPA описывает общие принципы, которым должны соответствовать все реализации, и скрывает детали.
READ ALSO
invalid type code:AC

invalid type code:AC

Пробую сериализовать обьектИдея такая: Есть класс HA(что-то типа человека) у него есть поля 1)Имя 2)Что делает 3)Id 4)Дата и есть методы 1)write 2)read...

247
java как сделать таймер [закрыт]

java как сделать таймер [закрыт]

Я хотел бы чтоб проще говоря у меня был таймер который после 1 минуты выполнял часть кода , допустим прибавлял к одной переменной еще 5 , и после...

153
Период у вещественных чисел

Период у вещественных чисел

Поддерживается ли в java бесконечные периодические дроби? Например, что будет при делении 86 на 30?

119
Сложный GridView / RecyclerView с картинками

Сложный GridView / RecyclerView с картинками

Есть данные в базе и с помощью их нужно создать GridView или RecyclerView не важно (суть одна что бы список был сортирован по категориям как на картинке...

168