+ All Categories
Home > Documents > Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.

Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.

Date post: 06-Apr-2015
Category:
Upload: swanhild-nelle
View: 107 times
Download: 0 times
Share this document with a friend
14
Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation
Transcript
Page 1: Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.

Advanced Mapping

Persistente Domänenmodelle mit JPA 2.0 und Bean Validation

Page 2: Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.

Embedded Objects

-id : int-name : String-salary : long

Employee

-id : int-street : String-city : String-state : String-zip : String

Address

0..1

2

Komposition: Mutterobjekt mit eingebetteten Objekten

Eingebettete Objekte haben keine eigene Identität

Mutterobjekt und eingebettete sind in derselben Tabelle abgelegt

EMPLOYEE

PK ID

NAME SALARY STREET CITY STATE ZIP

Page 3: Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.

Embedded Objects, Beispiel

3

@Embeddablepublic class Address { private String street; private String city; private String state; private String zip;}

@Entitypublic class Employee { @Id private int id; private String name; private long salary; @Embedded private Address address;}

Page 4: Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.

Enhanced Embeddables (JPA 2.0)

Verschachtelung von Embeddables und Embeddables mit Beziehungen

4

@Embeddablepublic class Assembly { ... @Embedded ShippingDetail shipDetails;

@ManyToOne Supplier supplier; ...}

Page 5: Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.

5

Zusammengesetzte Primärschlüssel

public class EmployeeId implements Serializable { protected String country; protected int id;}

// Variante 1@IdClass( EmployeeId.class )@Entity public class Employee { @Id protected String country; @Id protected int id;}

// Variante 2@Entity public class Employee { @EmbeddedId public EmployeeId id;}

Page 6: Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.

Composite Primary Key With Relationships (JPA 2.0)

6

@Entity @IdClass(PartPK.class)public class Part { @Id int partNo; @Id @ManyToOne Supplier supplier;}

public class PartPK { int partNo; int supplier;}

Page 7: Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.

7

Read-Only Mappings und Optional

Read-Only@Column(insertable = false, updateable = false)

Optional@ManyToOne(optional = true) // Default

Page 8: Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.

8

Mehrere Tabellen pro Entity

Gelegentlich wird eine Entity in der Datenbank in mehrere Tabellen modelliert oder muss umgekehrt aus mehreren Tabellen zusammengesetzt werden.

Eine Entity kann beliebig viele Sekundärtabellen haben:

@Entity@Table( name = "Employee" )@SecondaryTable( name = "EmployeeExt", pkJoinColumns = { @PrimaryKeyJoinColumn(name="idRef", referencedColumnName = "id")})public class Employee { ...}

Page 9: Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.

9

Mapping von SQL-Views

Komplexe Abfragen werden in einer Datenbank gerne als (materialisierte) View vorgehalten. Um Performance-Vorteile zu nutzen, kann eine View wie eine Entity angesprochen werden. Beispiel:

@Entity public class EmployeeStats{ @Id protected long id; @Column( insertable=false, updatable=false) protected int numPhones; // ... CREATE VIEW employeestats ( id, numPhones ) AS SELECT e.id, COUNT(p.*) FROM employee e LEFT OUTER JOIN PHONES P on (…) group by e.id

Page 10: Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.

10

Vererbung

Vererbungshierarchien können problemlos verwendet und abgebildet werden.

Klassen können abstrakt oder konkret sein.

Alle Klassen in der Vererbungshierarchie müssen den Primärschlüssel der Basisklasse verwenden (erben).

Es gibt vier Mappingstrategien auf die Datenbank:

Eine einzige Tabelle für die gesamte Verbungshierarchie Eine Tabelle für jede konkrete Klasse Eine Tabelle für jede Klasse Mapped Superclass

Page 11: Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.

11

SINGLE_TABLE

-id : int-name : String

Project

DesignProject QualityProject

PROJECT

ID

DTYPE (O) NAME (O)

@Entity @Inheritance public class Project

@Entity public class DesignProject extends Project

@Entity public class QualityProject extends Project

Page 12: Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.

12

JOINED

PROJECT

ID

DTYPE (O) NAME (O)

QUALITYPROJECT

ID (FK)DESIGNPROJECT

ID (FK)

-id : int-name : String

Project

DesignProject QualityProject

@Entity @Inheritance(strategy=InheritanceType.JOINED)public class Project

@Entity public class DesignProject extends Project

@Entity public class QualityProject extends Project

Page 13: Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.

13

TABLE_PER_CLASS (Optional)

-id : int-name : String

Project

DesignProject QualityProject

DesignProject

name (O)

QualityProject

name (O)

@Entity @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)public class Project

@Entity public class DesignProject extends Project

@Entity public class QualityProject extends Project

Page 14: Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.

14

MAPPED_SUPERCLASS

-phonenumber : String-type : String

Phone

-id : Integer-createdAt : Date-createdFrom : String-updatedAt : String-updatedFrom : String-version : Integer

BaseEntity// Klasse BaseEntity@MappedSuperclasspublic abstract class BaseEntity { @Id @GeneratedValue protected Integer id; protected Integer version; protected Timestamp createdAt; protected String createdFrom; protected Timestamp updatedAt; protected String updatedFrom;

// Klasse Phone@Entitypublic class Phone extends BaseEntity


Recommended