Kas yra JPA (Java Persistence API)?
sobes.tech AI
Atsakymas iš AI
JPA yra API specifikacija duomenų išlaikymo valdymui Java programose. Ji suteikia standartinį būdą Java objektų atvaizdavimui į reliacines duomenų bazes (ar kitas saugyklas) ir atgal. JPA yra Java EE (dabar Jakarta EE) platformos dalis ir taip pat gali būti naudojama kaip nepriklausomos programos.
JPA pagrindiniai komponentai:
- Entity: Įprasti Java klasės (POJO), pažymėtos
@Entityanotacija, atvaizduojančios duomenis bazėje. - EntityManager: Sąsaja sąveikai su išlaikymo kontekstu. Naudojama ieškoti, kurti, atnaujinti ir šalinti entitetus.
- Persistence Context: Entitetų rinkinys, valdoma
EntityManager. Jame stebimi entitetų pakeitimai prieš sinchronizuojant su duomenų baze. - JPQL (Java Persistence Query Language): Objektų orientuotas užklausų kalba, panaši į SQL, bet veikia su entitetais ir jų ryšiais, o ne su lentelėmis ir stulpeliais.
- Criteria API: Objektų orientuotas API dinamiškoms užklausoms vykdyti.
persistence.xml: Konfigūracijos failas, aprašantis išlaikymo vienetus (persistence units) ir jų savybes (pvz., prisijungimo prie duomenų bazės informaciją, žemėlapių strategiją).
JPA nėra konkreti ORM (Object-Relational Mapping) įgyvendinimas, o tik apibrėžia sutartis ir API. Yra įvairių JPA teikėjų, įgyvendinančių šią specifikaciją, iš kurių populiariausi:
- Hibernate
- EclipseLink
- Apache OpenJPA
Pavyzdys entiteto apibrėžimo:
// Entitetas, atvaizduojantis įrašą `products` lentelėje
@Entity
// Lentelės pavadinimas duomenų bazėje
@Table(name = "products")
public class Product {
// Pirminis raktas
@Id
// Pirminio rakto generavimo strategija
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// Stulpelis `name` lentelėje
private String name;
// Stulpelis `price` lentelėje
private BigDecimal price;
// Konstruktoriai, getteriai ir setteriai
// ...
}
EntityManager naudojimo pavyzdys:
// EntityManager gavimas iš EntityManagerFactory
EntityManagerFactory emf = Persistence.createEntityManagerFactory("myPersistenceUnit");
EntityManager em = emf.createEntityManager();
try {
// Transakcijos pradžia
em.getTransaction().begin();
// Naujo entiteto kūrimas
Product newProduct = new Product();
newProduct.setName("Laptop");
newProduct.setPrice(new BigDecimal("1200.00"));
// Entiteto išsaugojimas duomenų bazėje
em.persist(newProduct);
// Entiteto paieška pagal pirminį raktą
Product foundProduct = em.find(Product.class, 1L);
System.out.println("Rastas produktas: " + foundProduct.getName());
// JPQL užklausa
List<Product> allProducts = em.createQuery("SELECT p FROM Product p", Product.class).getResultList();
for (Product p : allProducts) {
System.out.println(p.getName());
}
// Transakcijos įvykdymas
em.getTransaction().commit();
} catch (Exception e) {
// Klaidos atveju transakcijos atšaukimas
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
e.printStackTrace();
} finally {
// EntityManager uždarymas
em.close();
// EntityManagerFactory uždarymas
emf.close();
}
Pagrindinis JPA tikslas - supaprastinti duomenų bazių programų kūrimą, abstrakcionuojant žemo lygio JDBC ir SQL detales, teikiant objektų orientuotą požiūrį į išlaikymą. Tai didina kodo pernešamumą ir mažina priklausomybę nuo konkrečios duomenų bazės.