Java Persistence API

Das Java Persistence API ist der Teil von EJB 3, der sich mit der Persistenz von Java-Objekten in relationalen Datenbanken (siehe relationale Datenbank) befasst.

Die Abbildung zwischen dem objektorientierten und dem relationalen Modell erfolgt mit Annotationen.

Für Klassen können die folgenden Annotationen verwendet werden:

@Entity -- markiert die Klasse als persistierbar
@Inheritance, @DiscriminatorColumn, @DiscriminatorValue -- legt fest, wie mit Klassenhierarchien umgegangen wird
@IdClass -- markiert eine Klasse als zusammengesetzten Primary Key
@Table -- spezifiziert die zugehörige Tabelle
@UniqueConstraint -- Unique Constraints für eine Tabelle
@NamedQuery -- benannte Queries für ein Entity


Methoden dieser persistierbaren Klassen können mit den folgenden Annotationen markiert werden, damit sie zu speziellen Zeitpunkten aufgerufen werden:

@PostLoad -- nach dem Laden
@PostPersist -- nach dem Speichern
@PostRemove -- nach dem Löschen
@PostUpdate -- nach dem Ändern
@PrePersist -- vor dem Speichern
@PreRemove -- vor dem Löschen
@PreUpdate -- vor dem Ändern


Für Instanzvariablen oder die zugehörigen Accessor-Methoden können die folgenden Annotationen verwendet werden:

@Transient -- Instanzvariable wird nicht persistiert
@Column -- steuert die Abbildung auf eine Spalte
@Enumerated -- steuert die Persistierung bei Enumerations
@Temporal -- steuert die Persistierung bei Daten, Uhrzeiten oder Zeitstempeln
@Lob -- legt fest, dass der Wertebereich ein Large Object ist
@Id -- markiert eine Spalte als zum Primary Key gehörig
@GeneratedValue -- legt fest, wie Werte von Primary Keys automatisch erzeugt werden
@EmbeddedId -- für zusammengesetzte Primary Keys
@OneToMany, @ManyToMany -- die Instanzvariable enthält eine mehrere referenzierte Entitäten
@ManyToOne -- die Instanzvariable enthält eine referenzierte Entität
@JoinColumn, @JoinColumns -- für den Umgang mit Foreign Keys
@JoinTable -- für Zwischentabellen bei Many to Many Assoziationen oder bei unidirektionalen One to Many Assoziationen


Ausgangspunkt für Operationen auf dem Datenmodell ist das Interface EntityManager. Erhalten kann man einen EntityManager mit der Annotation @PersistenceContext per Dependency Injection.

Operationen (also konkrete Selects, Updates und Deletes) werden durch Objekte repräsentiert, die das Query Interface implementieren (siehe auch @NamedQuery).


Quellen

http://java.sun.com/developer/technicalArticles/J2EE/jpa/
http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html


JSR 220: Enterprise JavaBeansTM Version 3.0 Java Persistence API