Objektrelationales Mapping mit JPA Entity Mapping Jonas Bandi Simon Martinelli
Access Typ Für das Persistenz-Framework existieren zwei Zugriffspunkte auf die Daten einer Klasse Field public class Employee private int id; } Property public class Employee { protected int public int getId() { return id; } }
Mapping Es wird immer vom Defaultverhalten ausgegangen Das Defaultverhalten kann = "EMP") public class = "EMP_ID")... }
Persistente Datentypen Erlaubt sind Alle primitiven Typen, java.lang.String Alle Wrapperklassen und serialisierbaren Typen (z.B. Integer, BigDecimal, Date, Calendar ) byte[], Byte[], char[], Character[] Enumerations Beliebige weitere Entity-Klassen Collections von Entities, welche als Collection<>, List<>, Set<> oder Map<> deklariert sind. Nicht erlaubt sind Alle Arten von Arrays ausser die obgenannten Collections von etwas anderem als Entities, also z.B. Wrapperklassen und andere serialiserbare Typen.
Entity Identity - Primärschlüssel Jede Entity-Klasse muss einen bezeichneten Primärschlüssel besitzen. Eine Id kann von folgenden Typen sein: Primitive Java Typen: byte, int, short, long, char Wrapper Klassen: Byte, Integer, Short, Long, Character Array von primitiven Typen oder Wrapper Klassen java.lang.String java.math.BigInteger Zeittypen: java.util.Date, java.sql.Date Floating Point Typen sind ebenfalls erlaubt, aber sind aufgrund der möglichen Rundungsfehler nicht zu empfehlen
Primärschlüssel Generierung Primärschlüssel können in Zusammenarbeit mit der Datenbank generiert public class = GenerationType.IDENTITY) public int id; } Stragegien sind Identity, Table, Sequence und Auto (Default)
public class Employee = "Emp_Gen", table = "ID_GEN", pkColumnName = "GEN_NAME", valueColumnName = GenerationType.TABLE, generator = "Emp_Gen") private int id;... } GenerationType.TABLE
Transiente Attribute Attribute können von der Persistierung ausgeschlossen werden Entweder mittels transient : transient String translatedName; oder wenn das Attribut serialisiert werden soll mittels String translatedName;
Temporale Typen Erlaubte Zeittypen: java.sql.Date, java.sql.Time, java.sql.Timestamp java.util.Date, java.util.Calendar java.sql Typen brauchen keine weitere Definition Bei java.util Typen muss der JDBC Typ angegeben private Calendar dob; Mögliche Typen: TemporalType.DATE, TemporalType.TIME, TemporalType.TIMESTAMP
Enumerations Enumerations können persistent sein. In der Datenbank wird entweder der Ordinalwert (Position) oder der Stringwert (Name der Konstante) abgelegt. Variante protected MessageStatus status; Variante protected MessageStatus status; Vorsicht bei Änderungen an der Enumeration!
Large Objects Large private byte[] picture;
Java / SQL Type Mapping Implizit durch JDBC Data Type Conversion Table definiert Explizit durch Annotation, = "sender") protected String sender; Produktspezifisch durch JPA-Implementation oder im JDBC-Driver für die jeweilige Datenbank