Java Persistence API 2.x. crud + relationships + jp-ql



Ähnliche Dokumente
Datenzugriffskomponente mit JPA 2.1

Softwareentwicklung mit Enterprise JAVA Beans

Datenmanagement in Android-Apps. 16. Mai 2013

Datenbankpraktikum, Gruppe F. JPA mit Hibernate. Alexander Stautner, Harald Zauner, Sascha Schreier

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Kapitel 4 Die Datenbank Kuchenbestellung Seite 1

Einführung in die Programmierung

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Java: Vererbung. Teil 3: super()

Die Backup-Voreinstellungen finden Sie in M-System Server unter dem Reiter "Wartung".

MCRServlet Table of contents

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Übungsaufgabe Transaktion als Middleware

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Workshop Java Webentwicklung Einführung in Hibernate. Ulrich Stärk

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access. Die Grundlagen der Datenbanken.

Einführung in die Java- Programmierung

Folge 18 - Vererbung

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Datenbanken für Online Untersuchungen

Internet online Update (Mozilla Firefox)

Der lokale und verteilte Fall

4. BEZIEHUNGEN ZWISCHEN TABELLEN

Enigmail Konfiguration

Lehrer: Einschreibemethoden

Programmieren in Java

Architektur des agimatec-validation Frameworks

Fallbeispiel: Eintragen einer Behandlung

Objektorientierter Entwurf (OOD) Übersicht

ecaros2 - Accountmanager

Software Entwicklung II (SS12)

Software Engineering Klassendiagramme Assoziationen

MaklerManager Ergänzung zum Handbuch 2.0

WebService in Java SE und EE

Anforderungen an die HIS

FH-SY Chapter Version 3 - FH-SY.NET - FAQ -

Java Einführung Packages

MdtTax Programm. Programm Dokumentation. Datenbank Schnittstelle. Das Hauptmenü. Die Bedienung des Programms geht über das Hauptmenü.

HTML5 HOCKEYSTICK EXPANDABLE BANNER v1.0

Anbindung einer Gateprotect GPO 150

Hilfedatei der Oden$-Börse Stand Juni 2014

Softwareentwicklungspraktikum Sommersemester Feinentwurf

Nutzung von GiS BasePac 8 im Netzwerk

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten

mobilepoi 0.91 Demo Version Anleitung Das Software Studio Christian Efinger Erstellt am 21. Oktober 2005

CMS.R. Bedienungsanleitung. Modul Cron. Copyright CMS.R Revision 1

RESTful Web. Representational State Transfer

Arbeitsgruppen innerhalb der Website FINSOZ e.v.

ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg Weiterstadt

Info-Veranstaltung zur Erstellung von Zertifikaten

Inventur. Bemerkung. / Inventur

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Abwesenheitsnotiz im Exchange Server 2010

Bereich METIS (Texte im Internet) Zählmarkenrecherche

XINDICE. The Apache XML Project Name: J acqueline Langhorst blackyuriko@hotmail.de

ID VisitControl. Dokumentation Administration Equitania Software GmbH cmc Gruppe Seite 1

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

Programmteil Bautagebuch

Import des Out of Office Status von Exchange in LANDESK Service Desk

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel

WinVetpro im Betriebsmodus Laptop

Anleitung SEPA-Lastschriften mit VR-NetWorld Software 5

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 17: 3-Schichten-Architektur 2

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Um die Rücklagen ordnungsgemäß zu verbuchen, ist es wichtig, Schritt-für-Schritt vorzugehen:

Hibernate Das Praxisbuch für Entwickler

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

Thermoguard. Thermoguard CIM Custom Integration Module Version 2.70

Objektorientierte Programmierung

Achtung Konvertierung und Update von BDE nach SQL

MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003

Whitepaper. Produkt: combit Relationship Manager 7. combit Relationship Manager -rückläufer Script. combit GmbH Untere Laube Konstanz

3 Richtlinienbasierte Verwaltung und Multi-Server- Administration

Verwendung der PayJoe -API zum externen Upload von Belegen und Zahlungen

Erstellen eigener HTML Seiten auf ewon

Arbeiten mit UMLed und Delphi

Klassendiagramm. Kurzer Überblick über UML - Stand BlaBla

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein: - Ein Bootimage ab Version Optional einen DHCP Server.

LDAP Konfiguration nach einem Update auf Version 6.3 Version 1.2 Stand: 23. Januar 2012 Copyright MATESO GmbH

Anbindung des eibport an das Internet

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

Dokumentation zur Versendung der Statistik Daten

Kurzanweisung für Google Analytics

teamsync Kurzanleitung

mywms Vorlage Seite 1/5 mywms Datenhaltung von Haug Bürger

mit Musterlösungen Prof. Dr. Gerd Stumme, Dipl.-Inform. Christoph Schmitz 11. Juni 2007

In dem unterem Feld können Sie Ihre eintragen, wenn sie im System hinterlegt wurde. Dann wird Ihnen Ihr Passwort noch einmal zugeschickt.

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Einstellungen für SEPA-Lastschriften in der VR-NetWorld-Software

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Umzug der Datenbank Firebird auf MS SQL Server

Neuer Releasestand Finanzbuchhaltung DAM-EDV E Inhaltsverzeichnis. 1. Neuerungen Schnittstelle Telebanking mit IBAN und BIC...

Kurzanleitung fu r Clubbeauftragte zur Pflege der Mitgliederdaten im Mitgliederbereich

Planung für Organisation und Technik

Anleitung. Verschieben des alten -Postfachs (z.b. unter Thunderbird) in den neuen Open Xchange-Account

E Mail Versand mit der Schild NRW Formularverwaltung

Transkript:

Java Persistence API 2.x crud + relationships + jp-ql

Grundprinzip 10.02.10 2

Problematik Man muss bei der Persistierung immer das Klassenmodell und dessen Umsetzung im Datenmodell (in der DB) berücksichtigen. Klassenmodell objektorientierte Programmiersprache Datenmodell Repräsentation in der Datenbank mit prozeduraler Bearbeitung... gear rpm velocity 5 90 18 Relational Table

Persistieren in Java SE Welche Java Versionen gibt es eigentlich?

Wie kann man eine Klasse persistieren? Annotation @Entity bei Klasse Annotation @Id bei Primärschlüssel Standardkonstruktor (DefaultKonstruktor) Serializable implementieren

Mögliche Annotationen Annotation @Table, zur Benennung der DB-Tabelle Annotation @SequenceGenerator zum Erstellen einer Sequenz in der DB Annotation @GeneratedValue für automatische Schlüsselvergabe

Entity mit Autowert und Sequenz Autowert Sequence

Zustände eines Objekts detach

Unterschiede JPA in JavaSE und JavaEE In JavaEE (bei Verwendung eines Application Servers wie z.b. Glassfish) muss man die zu persistierenden Klassen nicht in die persistence.xml eintragen. Die Annotation mit @Entity genügt. Man muss die Transaktionen nicht explizit öffnen und beenden. Die Hilfsklasse JpaUtil wird nicht mehr benötigt, da der EntityManager bei JavaEE injiziert wird (Hollywood-Prinzip) Es wird empfohlen, auch bei JavaEE in der Persistenz-Unit das SQL-Logging zu aktivieren <property name="eclipselink.logging.level" value="fine"/>

Konfiguration von JPA https://gist.github.com/mortezaadi/8619433

pom.xml mit JavaSE JPA - API JPA Implementierung, könnte auch Hibernate sein Treiber für DerbyDb, hiermit kann auch eine DB-Instanz betrieben werden zb embedded mode Client-Treiber für DerbyDb

persistence.xml mit JavaSE

pom.xml mit JavaEE

persistence.xml mit JavaEE

CRUD-Operationen Create Read Update - Delete

Persistenzunit Die Persistenzunit ist eine zentrale xmldatei, in der sämtliche Konfigurationen des DB-Zugriffs verwaltet werden.

Einstellungen für Generierung der DB <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/> none Es werden keine Tabellen generiert. Diese Einstellung ist bei Produktivsystemen create Es wird versucht die Tabellen zu erstellen. Existieren diese bereits, wird nichts geändert drop-and create Alle Objekte der DB werden gelöscht und vom Provider neu erstellt drop Alle Objekte in der DB werden beim Deployment gelöscht Hibernate-spezifische Einstellungen <property name="hibernate.hbm2ddl.auto" value="create"/> http://antoniogoncalves.org/2014/12/11/generating-database-schemas-with-jpa-2-1/ https://docs.oracle.com/javaee/7/tutorial/persistence-intro005.htm

Transaktionen Ein großer Unterschied zwischen JPA in JavaSE und JPA in JavaEE-Umgebungen ist, dass durch die Einbettung der DB-Operationen in EJBs, das Transaktionshandling vom EJB-Container übernommen wird Man muss die Transaktionen nicht mehr beginnen und beenden: em.gettransaction().begin(); em.persist(vehicle); em.gettransaction().commit(); sondern nur noch folgendes coden: em.persist(vehicle); Wird die Methode ausgeführt, erfolgt ein Commit(), im Falle eines Abbruchs ein Rollback()

EntityManager Eine zentrale Klasse in JPA ist der EntityManager Ein entitymanager ist mit dem Persistenzkontext assoziert und entspricht einer Menge von EntitätsInstanzen. Jede Entitäts-Instanz existiert im Persistenzkontext nur einmal und ist daher eindeutig. Innerhallb des Persistenzkontexts werden die Entitäten und ihr Lebenszyklus verwaltet. Die EntityManager API erzeugt und löscht die persistenten Entitäts-Instanzen und findet Entitäten anhand ihres Schlüssels oder kann Abfragen (Queries) durchführen Ein EntityManager darf nur einmal existieren, sonst kann es Datenverlusten kommen.

EntityManager Ein EntityManager wird vom Container verwaltet und injiziert. Gibt es mehr als eine Persistenzunit, muss diese angegeben werden.

Create

Read

Update

Delete

JPA-Converter http://www.adam-bien.com/roller/abien/entry/new_java_8_date_and https://weblogs.java.net/blog/montanajava/archive/2014/06/17/using-java-8-datetime-classes-jpa

LocalDate in sql.date konvertieren 2 Entität mit LocalDate-Attribut

LocalDate in sql.date konvertieren 1 JPA-Converter

LocalDate in sql.date konvertieren 3 Transparenter Aufruf des Converters

JP-QL Java Persistence Query Language http://www.objectdb.com/java/jpa/query http://www.tutorialspoint.com/de/jpa/jpa_jpql.htm https://en.wikibooks.org/wiki/java_persistence/jpql https://wiki.eclipse.org/eclipselink/userguide/jpa/basic_jpa_development/querying/jpql

Einsatzgebiet Ist SQL nachempfunden Dient zum Lesen (READ) von Datensätzen: SELECT Query Ändern (UPDATE): UPDATE Query Löschen (DELETE): DELETE Query von Datensätzen. Arten: Query: Select-Statement direkt im Aufruf NamedQuery: Benannte Query NativeQuery: Natives SQL in der Query NamedNativeQuery

Daten

Dynamic Query mit Query und TypedQuery

NamedQuery Definition in Entity

NamedQuery - Aufruf

NamedQuery mit Named Parameter

NamedQuery mit Positional Parameters

NativeQuery (NamedNativeQuery) Alle Spalten der Tabelle werden in eine Liste mit Vehicle Objekten geladen Alle Spalten der Tabelle werden in ein Vehicle Objekt geladen Nur gewisse Spalten der Tabelle werden in ein Objekt-Array geladen

Aggregationen

Beziehungen zwischen Entitäten

Vererbung Eine Vererbungshierarchie soll persistiert werden Hier gibt es drei Strategien: JOINED SINGLE_TABLE TABLE_PER_CLASS

InheritanceType.SINGLE_TABLE @Entity @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @Table(name="jpademo_kfz") public abstract class Kfz implements Serializable { @Id private Long id; private String brand; private String type; @Entity @Table(name="jpademo_pkw") public class Pkw extends Kfz implements Serializable { private boolean iscabrio; private int seats; Es wird eine Tabelle mit allen Attributen für sämtliche Klassen angelegt (mit Diskriminator DTYPE)

InheritanceType.TABLE_PER_CLASS @Entity @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) @Table(name="jpademo_kfz") public abstract class Kfz implements Serializable { @Id private Long id; private String brand; private String type; @Entity @Table(name="jpademo_pkw") public class Pkw extends Kfz implements Serializable { private boolean iscabrio; private int seats; Es wird je konkreter Klasse eine Tabelle mit allen Attributen der Klasse angelegt

InheritanceType.JOINED @Entity @Inheritance(strategy=InheritanceType.JOINED) @Table(name="jpademo_kfz") public abstract class Kfz implements Serializable { @Id Die Attribute der Basisklasse in private Long id; private String brand; Tabelle und je eine Tabelle pro private String type; abgeleiteter Klasse (mit Diskriminator @Entity @Table(name="jpademo_pkw") public class Pkw extends Kfz implements Serializable { private boolean iscabrio; private int seats; DTYPE) einer

Diskriminator Dies ist ein Beispiel für Convention over Configuration lat. discriminare = trennen, scheiden Der Persistence Provider kann so unterscheiden, zu welcher Klasse die Zeile gehört Mit der Annotation @DiskriminatorValue kann für jede Tabelle ein eigener Wert (anstelle des Klassennamens vergeben werden.

Beziehungen zw. Tabellen (Joins) 3 Arten (Multiplizität / Kardinalität) 1:1 1:n n:m (assoziative Tabelle notwendig) Möglichkeiten zur Navigation im Klassenmodell Unidirektional Bidirektional Ausgestaltung im Datenmodell Mit assoziativer Tabelle (1:n, n:m) Ohne assoziative Tabelle (nur bei 1:1 und 1:n möglich)

1:n unidirektional, ohne assoz. Tabelle Var. 1 Durch JoinColumn gibt es keine assoziative Tabelle CascadeType.ALL wandelt die Beziehung (Assoziation) in eine Komposition um (existenzabhängig)

1:n unidirektional, ohne assoz. Tabelle Var. 2

1:n unidirektional, mit assoz. Tabelle Var. 1 Anstelle von Lists können auch Sets oder Bags vorteilhaft sein

1:n bidirektional, mit assoz. Tabelle

1:n bidirektional, ohne assoz. Tabelle Mit @JoinColumn(name="kfz_id", nullable=false) in der Klasse Registration kann verhindert werden, dass es eine Registration ohne Kfz gibt.

Troubleshooting Immer Logs kontrollieren