Какой опыт работы с JPA (Java Persistence API)?

«Какой опыт работы с JPA (Java Persistence API)?» — вопрос из категории Hibernate, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Имею опыт использования JPA в качестве основного ORM-фреймворка для работы с реляционными базами данных в Java-приложениях.

Основные практики и используемые возможности:

  1. Маппинг сущностей:

    @Entity
    @Table(name = "users")
    public class User {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        @Column(name = "email", nullable = false, unique = true, length = 100)
        private String email;
    
        // Отношения
        @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
        private List<Order> orders = new ArrayList<>();
        // ...
    }
  2. Работа с данными:

    • Использование Spring Data JPA репозиториев (JpaRepository) для стандартных CRUD-операций.
    • Написание кастомных запросов с помощью @Query (как JPQL, так и нативный SQL).
    • Управление транзакциями через @Transactional.
    • Работа с EntityManager для более сложных операций.
  3. Моделирование связей: Работа с аннотациями @OneToOne, @OneToMany, @ManyToOne, @ManyToMany, настройка каскадирования и стратегий загрузки (FetchType).

Преимущества JPA: Стандартизация, снижение количества шаблонного SQL-кода, удобная интеграция со Spring-экосистемой. Сложности: Требует понимания контекста персистентности, генерации запросов и производительности (проблема N+1, оптимальные выборки).