Wat is JPA (Java Persistence API)?
sobes.tech AI
Antwoord van AI
JPA is een API-specificatie voor het beheer van gegevenspersistentie in Java-toepassingen. Het biedt een standaardmanier om Java-objecten te mappen naar relationele databases (of andere opslagplaatsen) en vice versa. JPA maakt deel uit van het Java EE-platform (nu Jakarta EE) en kan ook worden gebruikt in standalone-toepassingen.
Belangrijke componenten van JPA:
- Entity: Gewone Java-klassen (POJO's), gemarkeerd met de annotatie
@Entity, die gegevens in de database vertegenwoordigen. - EntityManager: Interface voor interactie met de persistentiecontext. Wordt gebruikt voor het zoeken, maken, bijwerken en verwijderen van entiteiten.
- Persistentiecontext: Verzameling van entiteiten die worden beheerd door
EntityManager. Hier worden wijzigingen in entiteiten gevolgd voordat ze worden gesynchroniseerd met de database. - JPQL (Java Persistence Query Language): Objectgeoriënteerde querytaal, vergelijkbaar met SQL, maar die opereert met entiteiten en hun relaties in plaats van tabellen en kolommen.
- Criteria API: Objectgeoriënteerde API voor het uitvoeren van dynamische queries.
persistence.xml: Configuratiebestand dat de persistentie-eenheden (persistence units) en hun eigenschappen beschrijft (bijvoorbeeld, informatie over databaseverbinding, mappingstrategieën).
JPA is geen concrete ORM-implementatie (Object-Relational Mapping), maar definieert contracten en API. Er zijn verschillende JPA-aanbieders die deze specificatie implementeren, de populairste zijn:
- Hibernate
- EclipseLink
- Apache OpenJPA
Voorbeeld van het definiëren van een entiteit:
// Entiteit die een record in de tabel `products` vertegenwoordigt
@Entity
// Naam van de tabel in de database
@Table(name = "products")
public class Product {
// Primaire sleutel
@Id
// Strategie voor het genereren van de primaire sleutel
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// Kolom `name` in de tabel
private String name;
// Kolom `price` in de tabel
private BigDecimal price;
// Constructeurs, getters en setters
// ...
}
Voorbeeld van het gebruik van EntityManager:
// Verkrijg een EntityManager uit de EntityManagerFactory
EntityManagerFactory emf = Persistence.createEntityManagerFactory("myPersistenceUnit");
EntityManager em = emf.createEntityManager();
try {
// Begin transactie
em.getTransaction().begin();
// Maak een nieuwe entiteit
Product newProduct = new Product();
newProduct.setName("Laptop");
newProduct.setPrice(new BigDecimal("1200.00"));
// Sla de entiteit op in de database
em.persist(newProduct);
// Zoek een entiteit op basis van de primaire sleutel
Product foundProduct = em.find(Product.class, 1L);
System.out.println("Gevonden product: " + foundProduct.getName());
// Voer JPQL-query uit
List<Product> allProducts = em.createQuery("SELECT p FROM Product p", Product.class).getResultList();
for (Product p : allProducts) {
System.out.println(p.getName());
}
// Commit transactie
em.getTransaction().commit();
} catch (Exception e) {
// Rollback bij fout
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
e.printStackTrace();
} finally {
// Sluit EntityManager
em.close();
// Sluit EntityManagerFactory
emf.close();
}
Het hoofddoel van JPA is het vereenvoudigen van de ontwikkeling van applicaties die werken met databases, door de laag-niveau details van JDBC en SQL te abstraheren en een objectgeoriënteerde aanpak voor persistentie te bieden. Dit verhoogt de overdraagbaarheid van de code en vermindert de afhankelijkheid van een specifieke database.