Was ist JPA (Java Persistence API)?
sobes.tech KI
Antwort von AI
JPA ist eine API-Spezifikation für die Verwaltung der Persistenz von Daten in Java-Anwendungen. Sie bietet eine standardisierte Methode, Java-Objekte auf relationale Datenbanken (oder andere Datenspeicher) abzubilden und umgekehrt. JPA ist Teil der Java EE-Plattform (jetzt Jakarta EE) und kann auch in eigenständigen Anwendungen verwendet werden.
Wichtige Komponenten von JPA:
- Entity: Normale Java-Klassen (POJO), markiert mit der Annotation
@Entity, die Daten in der Datenbank repräsentieren. - EntityManager: Schnittstelle zur Interaktion mit dem Persistenzkontext. Wird verwendet, um Entitäten zu suchen, zu erstellen, zu aktualisieren und zu löschen.
- Persistenzkontext: Menge der von
EntityManagerverwalteten Entitäten. Hier werden Änderungen an Entitäten verfolgt, bevor sie mit der Datenbank synchronisiert werden. - JPQL (Java Persistence Query Language): Objektorientierte Abfragesprache, ähnlich SQL, arbeitet aber mit Entitäten und deren Beziehungen anstelle von Tabellen und Spalten.
- Criteria API: Objektorientierte API zur Ausführung dynamischer Abfragen.
persistence.xml: Konfigurationsdatei, die die Persistenzeinheiten (persistence units) und deren Eigenschaften beschreibt (z.B. Verbindungsinformationen zur Datenbank, Mappingstrategien).
JPA ist keine konkrete ORM-Implementierung (Object-Relational Mapping), sondern definiert Verträge und API. Es gibt verschiedene JPA-Anbieter, die diese Spezifikation umsetzen, die beliebtesten sind:
- Hibernate
- EclipseLink
- Apache OpenJPA
Beispiel für die Definition einer Entität:
// Entität, die einen Eintrag in der Tabelle `products` repräsentiert
@Entity
// Name der Tabelle in der Datenbank
@Table(name = "products")
public class Product {
// Primärschlüssel
@Id
// Strategie zur Generierung des Primärschlüssels
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// Spalte `name` in der Tabelle
private String name;
// Spalte `price` in der Tabelle
private BigDecimal price;
// Konstruktoren, Getter und Setter
// ...
}
Beispiel für die Verwendung von EntityManager:
// Erhalt eines EntityManager aus der EntityManagerFactory
EntityManagerFactory emf = Persistence.createEntityManagerFactory("myPersistenceUnit");
EntityManager em = emf.createEntityManager();
try {
// Beginn der Transaktion
em.getTransaction().begin();
// Erstellen einer neuen Entität
Product newProduct = new Product();
newProduct.setName("Laptop");
newProduct.setPrice(new BigDecimal("1200.00"));
// Speichern der Entität in der Datenbank
em.persist(newProduct);
// Suche nach einer Entität anhand des Primärschlüssels
Product foundProduct = em.find(Product.class, 1L);
System.out.println("Gefundenes Produkt: " + foundProduct.getName());
// Ausführen einer JPQL-Abfrage
List<Product> allProducts = em.createQuery("SELECT p FROM Product p", Product.class).getResultList();
for (Product p : allProducts) {
System.out.println(p.getName());
}
// Transaktion committen
em.getTransaction().commit();
} catch (Exception e) {
// Transaktion bei Fehler zurücksetzen
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
e.printStackTrace();
} finally {
// EntityManager schließen
em.close();
// EntityManagerFactory schließen
emf.close();
}
Das Hauptziel von JPA ist es, die Entwicklung von Anwendungen zu vereinfachen, die mit Datenbanken arbeiten, indem die Low-Level-Details der Arbeit mit JDBC und SQL abstrahiert werden und ein objektorientierter Ansatz für die Persistenz bereitgestellt wird. Dies erhöht die Portabilität des Codes und verringert die Abhängigkeit von einer bestimmten Datenbank.