Sobes.tech
Junior

Ի՞նչ է JPA (Java Persistence API):

sobes.tech AI

Պատասխան AI-ից

JPA — Java tətbiqlərində məlumatların davamlılığını idarə etmək üçün API spesifikasiyasıdır. Bu, Java obyektlərinin əlaqəli verilənlər bazalarına (və ya digər məlumat saxlama yerlərinə) və əksinə xətti bir şəkildə göstərilməsi üçün standart bir üsul təqdim edir. JPA, Java EE (indiki Jakarta EE) platformasının bir hissəsidir və ayrıca müstəqil tətbiqlərdə də istifadə oluna bilər.

JPA-nın əsas komponentləri:

  • Entity: @Entity annotasiyası ilə işarələnmiş adi Java sinifləri (POJO), verilənlər bazasında məlumatları təmsil edir.
  • EntityManager: Interfeys üçün əlaqə vasitəsidir. O, obyektlərin axtarışı, yaradılması, yenilənməsi və silinməsi üçün istifadə olunur.
  • Persistence Context: EntityManager tərəfindən idarə olunan obyektlər toplusu. Bu, verilənlər bazası ilə sinxronizasiya edilmədən əvvəl obyekt dəyişikliklərini izləyir.
  • JPQL (Java Persistence Query Language): Bir obyekt yönümlü sorğu dilidir, SQL-ə bənzər, lakin cədvəllər və sütunlar yerinə obyektlər və onların əlaqələri ilə işləyir.
  • Criteria API: Dinamik sorğular yerinə yetirmək üçün obyekt yönümlü API.
  • persistence.xml: Konfiqurasiya faylı, davamlılıq vahidlərini (persistence units) və onların xüsusiyyətlərini (məsələn, verilənlər bazasına qoşulma məlumatları, xəritələmə strategiyaları) təsvir edir.

JPA, ORM (Obyekt-Əlaqəli Xəritəçəkmə) üçün konkret bir tətbiq deyil, sadəcə müqavilələr və API-ni müəyyən edir. Bu spesifikasiyanı həyata keçirən müxtəlif təminatçılar mövcuddur, ən məşhurları:

  • Hibernate
  • EclipseLink
  • Apache OpenJPA

Varlıq təyin etmənin nümunəsi:

// `products` cədvəlində qeyd edən varlıq
@Entity
// Verilənlər bazasındakı cədvəlin adı
@Table(name = "products")
public class Product {

    // Birincil açar
    @Id
    // Birincil açarın nəsil strategiyası
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // `name` sütunu
    private String name;

    // `price` sütunu
    private BigDecimal price;

    // Konstruktorlar, getter və setterlər
    // ...
}

EntityManager istifadə nümunəsi:

// `EntityManagerFactory`-dən EntityManager alınması
EntityManagerFactory emf = Persistence.createEntityManagerFactory("myPersistenceUnit");
EntityManager em = emf.createEntityManager();

try {
    // Əməliyyatların başlanması
    em.getTransaction().begin();

    // Yeni varlıq yaradılması
    Product newProduct = new Product();
    newProduct.setName("Laptop");
    newProduct.setPrice(new BigDecimal("1200.00"));

    // Entitiy-in bazada saxlanması
    em.persist(newProduct);

    // Birincil açar ilə entitiy tapılması
    Product foundProduct = em.find(Product.class, 1L);
    System.out.println("Tapılan məhsul: " + foundProduct.getName());

    // JPQL sorğusu yerinə yetirmək
    List<Product> allProducts = em.createQuery("SELECT p FROM Product p", Product.class).getResultList();
    for (Product p : allProducts) {
        System.out.println(p.getName());
    }

    // Əməliyyatların təsdiqi
    em.getTransaction().commit();

} catch (Exception e) {
    // Xəta baş verdikdə əməliyyatın ləğvi
    if (em.getTransaction().isActive()) {
        em.getTransaction().rollback();
    }
    e.printStackTrace();
} finally {
    // EntityManager-in bağlanması
    em.close();
    // EntityManagerFactory-nin bağlanması
    emf.close();
}

JPA-nın əsas məqsədi, verilənlər bazası ilə işləyən tətbiqlərin inkişafını sadələşdirmək, JDBC və SQL ilə işləmənin aşağı səviyyəli detallardan soyutlanması ilə obyekt yönümlü yanaşma təqdim etməkdir. Bu, kodun köçürülməsini asanlaşdırır və onun müəyyən verilənlər bazasına bağlılığını azaldır.