Mis on JPA (Java Persistence API)?
sobes.tech AI
Vastus AI-lt
JPA on API spetsiifikatsioon andmete püsivuse haldamiseks Java rakendustes. See pakub standardset viisi Java objektide kuvamiseks relatsioonandmebaasides (või muudes salvestuskohtades) ja tagasi. JPA on osa Java EE (nüüd Jakarta EE) platvormist ning seda saab kasutada ka iseseisvates rakendustes.
JPA põhikomponendid:
- Entity: Tavalised Java klassid (POJO), millele on märgitud
@Entityannotatsioon ning mis esindavad andmeid andmebaasis. - EntityManager: Liides püsivuskonteksti suhtlemiseks. Seda kasutatakse entiteetide otsimiseks, loomiseks, uuendamiseks ja kustutamiseks.
- Persistence Context: Entiteetide kogum, mida haldab
EntityManager. Selles jälgitakse entiteetide muudatusi enne nende sünkroniseerimist andmebaasiga. - JPQL (Java Persistence Query Language): Objektorienteeritud päringukeel, mis sarnaneb SQL-ile, kuid töötab entiteetide ja nende suhetega, mitte tabelite ja veergudega.
- Criteria API: Objektorienteeritud API dünaamiliste päringute täitmiseks.
persistence.xml: Konfiguratsioonifail, mis kirjeldab püsivusüksusi (persistence units) ja nende omadusi (nt ühenduse andmebaasiga, kaardistamisstrateegia).
JPA ei ole konkreetne ORM (Object-Relational Mapping) teostus, vaid määratleb lepingud ja API. On erinevaid JPA pakkujaid, kes seda spetsifikatsiooni rakendavad, ning populaarsemad neist on:
- Hibernate
- EclipseLink
- Apache OpenJPA
Näide entiteedi määratlusest:
// Entiteet, mis esindab kirjet tabelis `products`
@Entity
// Tabeli nimi andmebaasis
@Table(name = "products")
public class Product {
// Esimene võti
@Id
// Esimese võtme genereerimise strateegia
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// Veerg `name` tabelis
private String name;
// Veerg `price` tabelis
private BigDecimal price;
// Konstruktorrid, getterid ja setterid
// ...
}
EntityManager kasutamise näide:
// EntityManageri saamine EntityManagerFactory-st
EntityManagerFactory emf = Persistence.createEntityManagerFactory("myPersistenceUnit");
EntityManager em = emf.createEntityManager();
try {
// Transaktsiooni algus
em.getTransaction().begin();
// Uue entiteedi loomine
Product newProduct = new Product();
newProduct.setName("Laptop");
newProduct.setPrice(new BigDecimal("1200.00"));
// Entiteedi salvestamine andmebaasi
em.persist(newProduct);
// Entiteedi otsimine primaarvõtme järgi
Product foundProduct = em.find(Product.class, 1L);
System.out.println("Leitud toode: " + foundProduct.getName());
// JPQL päring
List<Product> allProducts = em.createQuery("SELECT p FROM Product p", Product.class).getResultList();
for (Product p : allProducts) {
System.out.println(p.getName());
}
// Transaktsiooni kinnitamine
em.getTransaction().commit();
} catch (Exception e) {
// Kui tekib viga, tühistatakse transaktsioon
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
e.printStackTrace();
} finally {
// EntityManageri sulgemine
em.close();
// EntityManagerFactory sulgemine
emf.close();
}
JPA peamine eesmärk on lihtsustada andmebaasipõhiste rakenduste arendust, abstraktsiooni kaudu JDBC ja SQL madala taseme detailidest, pakkudes objektorienteeritud lähenemist püsivusele. See suurendab koodi ülekantavust ja vähendab selle sõltuvust konkreetsest andmebaasist.