Entity Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation
Access Typ Für das Persistenz-Framework existieren zwei Zugriffspunkte auf die Daten einer Klasse 2 // Field public class Employee private int id; } //Property public class Employee { protected int public int getId() { return id; } }
Access Typ Options (JPA 2.0) Verschiedene Access Types pro Klasse möglich Mischen von Acces Types in einer public class Vehicle double protected double getDbFuelEfficiency() { return convertToImperial(fuelEfficiency); }... }
Mapping Es wird immer vom Defaultverhalten ausgegangen Das Defaultverhalten kann übersteuert = "EMP") public class = "EMP_ID")... }
Persistente Datentypen Erlaubt: Alle primitiven Typen, 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: Alle Arten von Arrays ausser die obgenannten Collections von etwas anderem als Entities, also z.B. Wrapperklassen und andere serialiserbare Typen. 5
Java / SQL Type Mapping Implizit durch JDBC Data Type Conversion Table definiert Explizit durch Annotation, z.B. Produktspezifisch durch JPA-Implementation oder im JDBC-Driver für die jeweilige Datenbank = "sender") protected String sender;
Lazy Fetching und Large Objects Lazy Field Loading Large Objects = FetchType.LAZY) private String = private byte[] picture;
Enumerations Enumerations können persistent sein. In der Datenbank wird entweder der Ordinalwert (Position) oder der Stringwert (Name der Konstante) abgelegt. Vorsicht bei Änderungen an der Enumeration 8 // Variante protected MessageStatus status; // Variante protected MessageStatus status;
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 werden: Mögliche Typen: TemporalType.DATE, TemporalType.TIME, TemporalType.TIMESTAMP private Calendar dob;
Transiente Attribute Attribute können von der Persistierung ausgeschlossen werden Entweder mittels transient: oder wenn das Attribut serialisiert werden soll mittels Annotation: 10 transient private String private String translatedName;
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 11
Primärschlüssel Generierung Primärschlüssel können in Zusammenarbeit mit der Datenbank generiert werden. Beispiel: Stragegien sind Identity, Table, Sequence und Auto public class = GenerationType.IDENTITY) public Integer id; }
GenerationType.TABLE 13 public class Employee = "Emp_Gen", table = "ID_GEN", pkColumnName = "GEN_NAME", valueColumnName = GenerationType.TABLE, generator = "Emp_Gen") private int id;... }