JPA & Hibernate

In Java werden Daten in Form von Objekten verwaltet. Relationale Datenbanken legen Daten in Tabellen ab. Die beiden Konzepte sind grundlegend verschieden, sodass objektorientierte Programmiersprachen wie Java und relationele Datenbanken als nicht kompatibel gelten. Um das Problem zu lösen, werden die im Java Programm vorhandenen Klassen auf Datanbanktabellen abgebildet. Ein Objekt entspricht einer Ziele, während ein Attribut einer Tabellenspalte entspricht. Dieser Vorgang wird als objektrelationales Mapping (OR-Mapping) bezeichnet. 2010 wurde diese Vorgehensweise zum Java Standard (JPA Standard - Java Persistence API). Anwendungen, die OR-Mapping durchführen werden als JPA-Provider oder OR-Mapper bezeichnet. RapidClipse verwendet standardmäßig Hibernate als JPA-Provider.

Hinweis: JPA (Java Persistence API) ist der Standard. Ein JPA-Provider oder OR-Mapper ist eine reale Java Anwendung, die den JPA-Standard umsetzt, z.B. Hibernate, OpenJPA, EclipseLink. RapidClipse verwendet standardmäßig Hibernate.

Durch den Einsatz von Hibernate können Entwickler und Anwendung zur Laufzeit objektorientiert auf die Daten einer relationalen Datenbank zugreifen. Datenbankzugriffe werden nicht mehr in SQL sondern in vollständig Java formuliert. Dafür stehen dem Entwickler verschiedene Java APIs zur Verfügung, z.B.

  • JPQL / HQL (Hibernate-spezifische Variante von JPQL) - An SQL angelehnt, verwendet jedoch SQL-Strings was zahlreiche Nachteile mit sich bring.
  • JPA Criteria API - Sehr leistungsfähig, gilt jedoch als komplex und wird deshalb in der Praxis überwiegend für dynamische Queries verwendet.
  • JPA-SQL - Ermöglicht es Abfragen in SQL-Syntax zu schreiben und generiert daraus Javacode auf Basis der JPA Criteria API. Kombiniert die Vorteile von SQL und JPA Criteria API.

Erst zur Laufzeit werden die SQL Statements passend für die aktuell angebundene Datenbank automatisch von Hibernate generiert und an die Datenbank versendet. Datenbankanwendungen die mit Hibernate realisiert werden sind deshalb datenbankunabhängig. Aus Kompatibilitätsgründen können spezielle Datenbankfunktionen mit JPA nicht genutzt werden. Es lassen sich jedoch auch native SQL Statements in Form von SQL-Strings absetzen und somit alle Stärken und Fähigkeiten einer Datenbank nutzen. Die Datenbankunabhängigkeit geht dadurch jedoch verloren und die Verwendung von SQL-Strings hat erhebliche Nachteile.