Kas ir JPA (Java Persistence API)?
sobes.tech AI
Atbilde no AI
JPA ir API specifikācija datu saglabāšanai Java lietojumprogrammās. Tā nodrošina standarta veidu, kā attēlot Java objektus relāciju datu bāzēs (vai citās glabātuves vietās) un atpakaļ. JPA ir Java EE (tagad Jakarta EE) platformas daļa un to var izmantot arī kā neatkarīgu lietojumprogrammu.
JPA galvenie komponenti:
- Entity: Parastas Java klases (POJO), kuras ir atzīmētas ar
@Entityanotāciju un pārstāv datus datu bāzē. - EntityManager: Saskarne ar pastāvības kontekstu. To izmanto entītiju meklēšanai, izveidei, atjaunošanai un dzēšanai.
- Persistence Context: Entītiju kopums, ko pārvalda
EntityManager. Tajā tiek uzraudzītas entītiju izmaiņas pirms sinhronizācijas ar datu bāzi. - JPQL (Java Persistence Query Language): Objektorientēta vaicājumu valoda, kas līdzīga SQL, bet darbojas ar entītijiem un to saitēm, nevis ar tabulām un kolonnām.
- Criteria API: Objektorientēts API dinamisku vaicājumu izpildei.
persistence.xml: Konfigurācijas fails, kas apraksta pastāvības vienības (persistence units) un to īpašības (piemēram, savienojuma ar datu bāzi informācija, kartēšanas stratēģija).
JPA nav konkrēta ORM (Object-Relational Mapping) realizācija, bet tikai nosacījumu un API definīcija. Pastāv dažādi JPA nodrošinātāji, kas īsteno šo specifikāciju, no kuriem populārākie ir:
- Hibernate
- EclipseLink
- Apache OpenJPA
Entītijas definēšanas piemērs:
// Entītija, kas pārstāv ierakstu tabulā `products`
@Entity
// Tabulas nosaukums datu bāzē
@Table(name = "products")
public class Product {
// Primārais atslēgas lauks
@Id
// Primārās atslēgas ģenerēšanas stratēģija
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// Kolonna `name` tabulā
private String name;
// Kolonna `price` tabulā
private BigDecimal price;
// Konstruktori, getteri un setteri
// ...
}
EntityManager izmantošanas piemērs:
// EntityManager iegūšana no EntityManagerFactory
EntityManagerFactory emf = Persistence.createEntityManagerFactory("myPersistenceUnit");
EntityManager em = emf.createEntityManager();
try {
// Transakcijas sākums
em.getTransaction().begin();
// Jauna entītija izveide
Product newProduct = new Product();
newProduct.setName("Laptop");
newProduct.setPrice(new BigDecimal("1200.00"));
// Entītijas saglabāšana datu bāzē
em.persist(newProduct);
// Entītijas meklēšana pēc primārā atslēgas
Product foundProduct = em.find(Product.class, 1L);
System.out.println("Meklētais produkts: " + foundProduct.getName());
// JPQL vaicājums
List<Product> allProducts = em.createQuery("SELECT p FROM Product p", Product.class).getResultList();
for (Product p : allProducts) {
System.out.println(p.getName());
}
// Transakcijas apstiprināšana
em.getTransaction().commit();
} catch (Exception e) {
// Ja ir kļūda, transakcija tiek atcelta
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
e.printStackTrace();
} finally {
// EntityManager aizvēršana
em.close();
// EntityManagerFactory aizvēršana
emf.close();
}
Galvenais mērķis ar JPA ir vienkāršot datu bāzu lietojumprogrammu izstrādi, abstraktiem zemā līmeņa JDBC un SQL detaļām, nodrošinot objektorientētu pieeju pastāvībai. Tas uzlabo koda pārnesamību un samazina atkarību no konkrētas datu bāzes.