Objektrelationales Mapping mit JPA Advanced Mapping Jonas Bandi Simon Martinelli.

Post on 05-Apr-2015

105 views 1 download

Transcript of Objektrelationales Mapping mit JPA Advanced Mapping Jonas Bandi Simon Martinelli.

Objektrelationales Mapping mit JPA

Advanced Mapping

Jonas BandiSimon Martinelli

• Komposition: Mutterobjekt mit eingebetteten Objekten

• Eingebettete Objekte haben keine eigene Identität

• Mutterobjekt und eingebettete sind in derselben Tabelle abgelegt

Embedded Objects

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

Employee

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

Address

0..1

EMPLOYEE

PK ID

NAME SALARY STREET CITY STATE ZIP

Embedded Objects, Beispiel

@Embeddable

public class Address {

private String street;

private String city;

private String state;

private String zip;

// ...

}

@Entity

public class Employee {

@Id private int id;

private String name;

private long salary;

@Embedded private Address address;

// ....

}

Zusammengesetzte Primärschlüssel• Es wird eine spezielle ID-Klasse benötigt. Beispiel:

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

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

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

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 { ...}

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

SINGLE_TABLE

@Entity@Inheritance public class Project

@Entity public class DesignProject extends Project

@Entity public class QualityProject extends Project

Project

-id : int-name : String

DesignProject QualityProject

PROJECT

ID

DTYPE (O) NAME (O)

JOINED

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

@Entity public class DesignProject extends Project

@Entity public class QualityProject extends Project

PROJECT

ID

DTYPE (O) NAME (O)

QUALITYPROJECT

ID (FK)DESIGNPROJECT

ID (FK)

Project

-id : int-name : String

DesignProject QualityProject

TABLE_PER_CLASS

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

@Entity public class DesignProject extends Project

@Entity public class QualityProject extends Project

DesignProject

name (O)

QualityProject

name (O)

Project

-id : int-name : String

DesignProject QualityProject

MAPPED_SUPERCLASS

BaseEntity

@MappedSuperclasspublic abstract class BaseEntity {@Id@GeneratedValue(strategy = GenerationType.SEQUENCE)protected Integer id;protected Integer version;protected Timestamp createdAt;protected String createdFrom;protected Timestamp updatedAt;protected String updatedFrom;

Phone

@Entitypublic class Phone extends BaseEntity

-phonenumber : String-type : String

Phone

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

BaseEntity