4. Java Persistence API (JPA)

Größe: px
Ab Seite anzeigen:

Download "4. Java Persistence API (JPA)"

Transkript

1 4. Java Persistence API (JPA) Problem: OO in relationale DB Idee des Persistence Mapper Einfache Entity-Klasse Lebenslauf eines Entity-Objekts Umsetzung von 1:N- und M:N-Relationen Geordnete Daten Anfragen Vererbung Validierung 114

2 Literatur JPA 2.0: Sun Microsystem: JSR 317: JavaTMPersistence _0_final-spec.pdf ist der Standard; trotzdem sehr gut lesbar!) JPA 1.0: Sun Microsystem, JSR 220: Enterprise JavaBeans, Version 3.0, Java Persistence API (ejb-3_0-fr-specpersistence.pdf) Auch für Teile der weiteren Vorlesung C. Bauer, G. King, Java PersistencewithHibernate, Manning, Greenwich (USA) 2007 M. Keith, M. Schincariol, Pro EJB 3 -Java PersistenceAPI, Apress, Berkeley (USA),

3 Klassische Wege zur Verbindung SW und DB DB werden meist nicht alleine entwickelt, sie müssen mit umgebender SW integriert werden. Es gibt verschiedene Ansätze, die gerade bei der Anbindung von OO-SW relevant sind: - SW wird (z.b: mit PL/SQL) in der Datenbank entwickelt (hierzu gibt es auch objektorientierte Ansätze), externe SW kann auf Prozeduren und Funktionen zugreifen. - SQL-Aufrufe werden direkt in die SW eingebettet (EmbeddedSQL) bzw. Aufrufe werden durch ein einfaches Framework (z.b. JDBC, SQLJ) gekapselt. (Frage: wie bekomme ich Objekte in die DB?) - DB- und SW- wird eng miteinander verzahnt, hierzu stehen ausgereifte Development- Frameworks zur Verfügung (EJB,.NET) 116

4 Nutzung relationaler DB in OO-Programmen Bisheriger Ansatz: relationale DB vorhanden, wird an OO-Programm angeschlossen. Oberfläche + Geschäftslogik DB-Zugriffsschicht Was ist, wenn DB zusammen mit OO- Programm entwickelt wird? erster Ansatz: warum nicht genau so vorgehen z.b. JDBC relationale Datenbank 117

5 Lagerverwaltung (ein kleines OO-Modell) Lagerraum -nummer : String +verkaufswertberechnen() : float - artikel bezeichnet eine Collection von Produkten in einem Lagerraum - mit verkaufspreis() wird die Mehrwertsteuer eingerechnet, die bei Büchern anders sein soll. 1 beinhaltet -artikel * Produkt -name : String -lagermenge : int -preis : float +Produkt() : Produkt +verfuegbareanzahl() : int +verkauft(anzahl : int) : void +einlagern(anzahl : int) : void +verkaufspreis() : float Lebensmittel -verfallsdatum : Date +verlustam(stichtag : Date) : float Buch +verkaufspreis() : float 118

6 Aufgabe und Ansatz Objekte der im Lagerhaltungsmodell vorgestellten Klassen sollen persistentin einer relationalen DB abgespeichert werden Bei der Anbindung an die Datenbank sollen möglichst viele OO-Errungenschaften (Kapselung, Vererbung, Polymorphismus) übernommen werden Grundidee: Das Klassendiagramm kann ohne Methoden als ER-Diagramm gelesen werden, es beinhaltet eine 1:N und zwei 1:C Beziehungen. Anmerkung: Dieser Übersetzungsansatz war ein beliebtes Tummelfeld von Programmierern, es wird nur ein möglicher Ansatz vorgestellt. 119

7 Umgang mit Kapselung Objekte der Klasse Produkt können leicht in folgende Tabelle übersetzt werden. Produkt OID name lagermenge preis Produkt -name : String -lagermenge : int -preis : float +Produkt() : Produkt +verfuegbareanzahl() : int +verkauft(anzahl : int) : void +einlagern(anzahl : int) : void +verkaufspreis() : float zusätzlicher PrimaryKey vergeben, falls namenicht eindeutig Kapselungsidee wird aufgegeben, da man über die Datenbank immer direkt auf die Attribute zugreifen kann, nur durch Mehraufwand einschränkbar: Lösung auf der Zugriffsebene im OO-Programm (umgehbar) Spezielle Nutzer und Rechte, Nutzung von Views(Aufwand) 120

8 Anmerkungen Typischerweise werden Klassenvariablen nicht mit den jeweiligen Objekten abgespeichert, sie müssen explizit behandelt werden Es stellt sich generell die Frage, welche zusätzlichen Informationen in welchen Tabellen verwaltet werden sollen 121

9 Umgang mit Vererbung Vererbung kann durch eine zusätzliche Tabelle mit einer Referenz implementiert werden, dabei ist OID Schlüssel und Fremdschlüssel aus Produkt Lebensmittel OID verfallsdatum Produkt Lebensmittel -verfallsdatum : Date +verlustam(stichtag : Date) : float Für jede Vererbungsebene wird eine neue Tabelle benötigt, was den Zugriff aufwändig macht Durch die vorgeschlagene Struktur wird die Sichtweise ein Lebensmittel ist ein Produkt unterstützt 122

10 Umgang mit Polymorphismus Wie funktioniert Polymorphismus? public float verkaufswertberechnen(){ float ergebnis=0.0f; for(produkt tmp:artikel) ergebnis= ergebnis+ tmp.verfuegbareanzahl()*tmp.verkaufspreis(); (); return ergebnis; In der bisherigen relationalen Übersetzung muss sichergestellt werden, dass das richtige Objekt geladen wird Die genaue Klassendefinition bekommt man im vorgestellten Ansatz nur, wenn man alle zu Unterklassen gehörigen Tabellen untersucht, ob die OID vorkommt Alternativ kann man sich die genaue Klassenzugehörigkeit in einem weiteren Attribut der Tabelle Produkt merken 123

11 Umgang mit Objektidentität Objektidentität in der Datenbank wird durch den Primary Key garantiert Wird das Objekt aus der Datenbank gelesen, ist der Nutzer verantwortlich, dass kein zweites Exemplar des gleichen Objekts geladen wird Alternative: Beim ersten Herauslesen wird ein Flag (ein zusätzliches Attribut) gesetzt, dass sich das Exemplar außerhalb der DB befindet (Ansatz fordert viel Programmierdisziplin, insbesondere bei der Programmterminierung) 124

12 Umgang mit Beziehungen zwischen Objekten Exemplarvariablen, die Collectionsoder andere nicht triviale Objekttypen enthalten, müssen explizit durch eine oder mehrere Relationen oder Erweiterungen von Tabellen modelliert werden (der Ansatz ist vom Übergang vom ER-Diagramm zur Tabellenstruktur bekannt) Lagerraum Produkt OID name 1 lagermenge beinhaltet preis -artikel * Produkt lagerraum_oid Frage: Warum passt die skizzierte Lösung eigentlich nicht zum UML-Diagramm? 125

13 Bearbeiten von Objekten Wir haben gesehen, dass einfache Objekte häufig über mehrere Tabellen verteilt werden, d.h. zum Einlesen und Bearbeiten sind relativ aufwändige SQL-JOINS notwendig Weiterhin muss das OO-Programm die eindeutige Referenz eines Objektes in der relationalen DB kennen Beispiel: Einlesen eines Lebensmittels, das an eine Variable mit Namen banane gebunden war SELECT name, lagermenge, preis, verfallsdatum FROM Identifikation, Lebensmittel, Produkt WHERE Identifikation.Name = 'banane banane' AND Identifikation.OID = Produkt.OID AND Produkt.OID = Lebensmittel.OID 126

14 Zwischenfazit Selbst bei Beispielen, in denen der Einsatz relationaler Datenbanken sinnvoller Standard ist (Lagerverwaltung), wird die Verknüpfung eines OO-Programms mit relationaler Datenhaltung aufwändig Die Nutzung relationaler Datenbanken in OO-Programmen sollte immer über eine DB-Kapselung, die den Zugriff auf die DB regelt, erfolgen Für den Kapselungsansatz stehen verschiedene Produkte zur Verfügung (z. B. Hibernate, EclipseLink(TopLink)), JPA spezifiziert gemeinsames Interface Verwandte Ansätze: direkte Nutzung einer OO-Datenbank, Programmierung mit JDO 127

15 Konzept von Persistence-Mappern Persistence-Mapper(PM) muss wissen, welche Objekte persistiertwerden sollen -> markiere Klassen, deren Objekte verwaltet werden sollen Persistence-Mappermuss Beziehungen zwischen Objekten kennen Ablauf: Nutzer benutzt Objekt unter Verwaltung; dann übernimmt PM die Überwachung, führt Änderungen aus, regelt den Zugriff mehrerer Nutzer Ablauf: Nutzer erzeugt Objekt und muss PM einmal mitteilen, dieses zu verwalten PM kann selbst regeln, wie Aufgaben realisiert werden (Tabellenstruktur, Transaktionssteuerung) 128

16 Beispiel (1/7) package jpa20beispiel1; import javax.persistence.entity; import public class Mitarbeiter private int minr; private String name; public Mitarbeiter(){ //parameterloser Konstruktor benötigt public Mitarbeiter(int minr, String name) { //erlaubt this.minr = minr; this.name = name; public int getminr() {return minr; public void setminr(int minr) {this.minr = minr; public String getname() {return name; public void setname(string name) {this.name = name; 129

17 Beispiel (2/7) persistence.xml liegt im Ordner META-INF (projektartabhängig) Detaileinstellungen von JPA-Realisierungabhängig (z. B. EclispeLink(basiert auf TopLink), Hibernate, Apache OpenJPA) <?xml version="1.0" encoding="utf-8"?> <persistence version="2.0" xmlns=" xmlns:xsi=" instance" xsi:schemalocation=" <persistence persistence-unit name="jpa20beispiel1pu" transaction-type="resource_local type="resource_local"> "> <provider provider> org.eclipse.persistence.jpa.persistenceprovider </provider provider> <class>jpa20beispiel1.mitarbeiter</class> 130

18 131 Beispiel (3/7) <properties properties properties properties> <property property property property name="javax.persistence.jdbc.url name="javax.persistence.jdbc.url name="javax.persistence.jdbc.url name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/spielerei2"/> value="jdbc:derby://localhost:1527/spielerei2"/> value="jdbc:derby://localhost:1527/spielerei2"/> value="jdbc:derby://localhost:1527/spielerei2"/> <property property property property name="javax.persistence.jdbc.password name="javax.persistence.jdbc.password name="javax.persistence.jdbc.password name="javax.persistence.jdbc.password" value="kleuker value="kleuker value="kleuker value="kleuker"/> "/> "/> "/> <property property property property name="javax.persistence.jdbc.driver name="javax.persistence.jdbc.driver name="javax.persistence.jdbc.driver name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.clientdriver value="org.apache.derby.jdbc.clientdriver value="org.apache.derby.jdbc.clientdriver value="org.apache.derby.jdbc.clientdriver"/> "/> "/> "/> <property property property property name="javax.persistence.jdbc.user name="javax.persistence.jdbc.user name="javax.persistence.jdbc.user name="javax.persistence.jdbc.user" value="kleuker value="kleuker value="kleuker value="kleuker"/> "/> "/> "/> <property property property property name="eclipselink.ddl name="eclipselink.ddl name="eclipselink.ddl name="eclipselink.ddl-generation generation generation generation" value="drop value="drop value="drop value="drop-and and and and-create create create create-tables tables tables tables"/> "/> "/> "/> </ </ </ </properties properties properties properties> </ </ </ </persistence persistence persistence persistence-unit unit unit unit> </ </ </ </persistence persistence persistence persistence>

19 Beispiel (4/7) 132

20 Beispiel (5/7) package jpa20beispiel1; import java.util.list; import javax.persistence.entitymanager; import javax.persistence.entitymanagerfactory; import javax.persistence.persistence; public class Main { private EntityManagerFactory emf = Persistence. createentitymanagerfactory("jpa20beispiel1pu"); private EntityManager em = emf.createentitymanager(); public void beispieldaten() { String namen[] = {"Egon", "Erwin", "Ute", "Aische Aische"; em.gettransaction().begin(); (); for (int i=0; i<namen.length; i++) em.persist(new Mitarbeiter(i,namen[i])); em.gettransaction().commit(); (); 133

21 Beispiel (6/7) public void datenzeigen() { for (Mitarbeiter m : em.createquery( "SELECT m FROM Mitarbeiter m",mitarbeiter.class).getresultlist getresultlist()) { System.out.println(m.getMinr() () + ": " + m.getname()); public void schliessen() { if (em!= null && em.isopen()) {em.close em.close(); if (emf!= null && emf.isopen()) {emf.close emf.close(); public static void main(string[] args) { 0: Egon Main m = new Main(); 1: Erwin m.beispieldaten(); m.datenzeigen(); 2: Ute m.schliessen(); 3: Aische 134

22 Beispiel (7/7) Falls noch keine Tabelle Mitarbeiter existiert, wird diese angelegt 135

23 Suchen und Bearbeiten von einzelnen Objekten public void namenaendern(){ int eingabe=-1; while(eingabe!=0){ System.out.print("Welche Nummer (Ende mit 0): "); eingabe=new Scanner(System.in).nextInt(); (); Mitarbeiter m = em.find(mitarbeiter.class, eingabe); if(m == null) System.out.println("Witzbold"); "); else{ System.out.print("Neuer Name (alt:"+m.getname alt:"+m.getname()+"): "); String name=new Scanner(System.in).next(); (); EntityTransaction tr = em.gettransaction(); tr.begin(); m.setname(name); tr.commit(); 136

24 Zentrale Klassen Aufbau der Verbindung EntityManagerFactory emf = Persistence. createentitymanagerfactory("jpa20beispiel1pu"); Einrichtung sehr aufwändig, selten neu erstellen Einrichtung der Verbindung für den Nutzer EntityManager em = emf.createentitymanager(); kostet Zeit, gibt trotzdem meist sinnvoll Objekt häufiger zu erzeugen und zu schließen/löschen Nutzung einer Transaktion EntityTransaction tr = em.gettransaction(); kurzfristig nutzen: Daten vorbereiten, dann DB-Zugriff, dann schließen immer alles schließen(typisch in finally-block) Generelles Verhalten hängt von DB ab, in Großprojekten immer mit erfahrenem DB-Administrator arbeiten 137

25 Entity ist POJO Entity-Klassen-Objekte sind klassische Plain Old Java Objects Verpflichtung: public(oder protected) Konstruktor ohne Parameter Exemplarvariablen private oder protected, Zugriff über get... und set... Klasse, Methoden, Exemplarvariablen nicht final Serialisierbar[zumindest sehr sinnvoll] keine weiteren Einschränkungen beliebige weitere Methoden Vererbung (auch Entity von Nicht-Entity[aufwändig]) Nutzung abstrakte Klassen 138

26 Primary Key Typisch: Primary Key = GenerationType.AUTO) private int minr; folgende Datentypen erlaubt primitive Java-Typen (int, long, ) Wrapper von primitiven Java-Typen (Integer, Long, ) java.lang.string java.util.date java.sql.date 139

27 Persistierbare Typen/Klassen Primitive Typen (byte, char, int, long, float, double, boolean) java.lang.string Andere serialisierbare Typen: Wrapper der primitiven Typen java.math.biginteger java.math.bigdecimal java.util.date, java.util.calendar java.sql.date, java.sql.time, java.sql.timestamp Nutzerdefinierte serialisierbare Typen byte[], Byte[], char[], Character[] Enumeration Andere Entities Collections von Entities(Collection, Set, List, Map) 140

28 Persistent Fields / Properties Persistent private int minr; Exemplarvariablen direkt annotiert Zugriff des Persistence-Frameworks direkt auf Variablen Vorteil: Variable und Annotation stehen direkt zusammen Persistent public int getminr{ return this.minr; get-methode wird annotiert Zugriff auf Exemplarvariablen muss immer über Standard get erfolgen (auch in der Klasse selbst) Vorteil: Flexibilität, da Methode weitere Funktionalität haben kann 141

29 Annotationen zur Flexibilisierung Table(name="Chef") ") public class Mitarbeiter implements Serializable { private static final long serialversionuid = GenerationType.AUTO) private int Column(name="Leiter", ", nullable=false, updatable=true, unique=true) private String name;

30 PersistenceContext Wird für Objekte vorher festgehaltener Klassen definiert Entspricht einem Cache, der MANAGED-Objekte verwaltet EntityManager-Objekt für konkreten PersistenceContext EntityManager-Operationen arbeiten auf dem Cache Man muss EntityManagermitteilen, dass Daten in die DB geschrieben werden müssen em.gettransaction().commit(); (); Beim Schreiben können wg. der Transaktionssteuerung der DB Exceptions auftreten (abhängig von Steuerungsart) Im Zweifel bei immer echte Tabellen anschauen Üblich: nur kurz lebende EntityManager(erzeugen, Aktion, schließen) 143

31 Beispiel für Cache public class Mitarbeiter implements private int //maximal zwei Zeichen private String name; public Mitarbeiter() { //parameterloser Konstruktor benötigt public Mitarbeiter(String name) { this.name = name; // get- und set-methoden public String tostring(){ return name+"("+minr+")"; +")"; 144

32 Beispiel für Cache (2/2) public static void main(string[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPACachePU"); "); EntityManager em=emf.createentitymanager(); em.gettransaction().begin(); (); em.persist(new Mitarbeiter("ET")); ")); em.persist(new Mitarbeiter("JFK")); ")); for(int i=1;i<3;i++) System.out.println(em.find(Mitarbeiter.class,i)); em.gettransaction().commit(); (); em.close(); ET(1) JFK(2) [EL Warning]: :12: UnitOfWork( ) UnitOfWork( )- Exception [EclipseLink-4002]: org.eclipse.persistence.exceptions.databaseexception Internal Exception: java.sql.sqldataexception: Bei dem Versuch, VARCHAR 'JFK' auf die Länge 2 zu kürzen, ist ein Abschneidefehler aufgetreten. 145

33 Lebenslauf eines Entity-Objekts NEW -> merge() führt evtl. zur Mehrfachobjekterzeugung refresh() nur, wenn vorher persistiert 146

34 Unterschied: Lokal und DB immer beachten public static void main(string[] args) { EntityManagerFactory emf = Persistence. createentitymanagerfactory("jpa20beispiel1pu"); EntityManager em = emf.createentitymanager(); Mitarbeiter m1 = new Mitarbeiter("Ford"); "); Mitarbeiter m2 = new Mitarbeiter("Arthur"); "); em.gettransaction().begin(); (); 2: Arthur em.persist(m1); 1: Manta em.persist(m2); Ford(1) em.gettransaction().commit(); (); m1.setname("manta"); for (Mitarbeiter m : em.createquery( "SELECT m FROM Mitarbeiter m", Mitarbeiter.class).getResultList getresultlist()) System.out.println(m.getMinr() () + ": " + m.getname()); em.close(); em.refresh(m1); System.out.println(m1); 147

35 Sauberes Persistieren Auslagerung der Persistierungin eine Methode mit sauberer Exception-Behandlung public void persist(object object) { em.gettransaction().begin(); (); try { em.persist(object); em.gettransaction().commit(); (); catch (Exception e) { e.printstacktrace(); em.gettransaction().rollback(); (); finally { em.close(); 148

36 Klasse oder Tabelle? Bei der Entity-Nutzungoffen, ob erst Klassen designtund dann Tabellen entworfen werden Einfach: Tabellen existieren; dann typischerweise zur Tabelle eine Entity-Klassse erstellbar(generierbar) Wenn nichts gegeben: Entwurf der Entity-Klassen(Daten der Applikation mit ihren Abhängigkeiten) Ableitung oder Generierung der Tabellen Generierungsansätze: Drop and Create: beteiligte Tabellen löschen und neu anlegen ( und Test) Create: wenn nicht existent, dann anlegen (Realität) None: wenn nicht existent, dann Fehler (Realität) Hinweis: bei Änderungen neu übersetzen 149

37 Generelle JEE-Regel Convention over Configuration bedeutet: wenn nichts angegeben wird, wird ein Default- Wert genutzt Default-Werte sind zwar sinnvoll, sollte man aber kennen Erinnerung: Java-Inkonsistenz 150

38 Einschub: XML-Konfiguration Statt Annotationen zu nutzen, können diese Informationen auch in XML beschrieben werden Typisch: eine XML-Dateipro Klasse + zusammenführende XML-Datei Vorteil: Verhaltensänderungen ohne Codeänderung Nachteil: viele kleine penibel zu pflegende Dateien Auch möglich: XML und Annotationen; dabei schlägt XML die Annotationen 151

39 Kardinalitäten in JPA A x 1:1 zu einem A-Objekt gehört (maximal) ein anderes B- Objekt, die jeweils zu (maximal) einem A-Objekt gehören 1:N zu einem A-Objekt gehören beliebig viele B-Objekte, die jeweils zu (maximal) einem A-Objekt gehören (N:1 analog) M:N zu einem A-Objekt gehören beliebig viele B-Objekte, die jeweils zu beliebig vielen A-Objekten gehören Anders als bei Tabellen haben OO-Assoziationen Leserichtungen Unidirektional: nur von einer Seite auf die andere schließbar Bidirektional: Abhängigkeit in beide Richtungen manövrierbar (es gibt Besitzer der Beziehung; für Updates wichtig) y B 152

40 Umsetzung unidirektional 1:N public class Projektauftrag implements private int paid; private String titel; public String gettitel() { return titel; public void settitel(string titel) { this.titel = titel; 153

41 Umsetzung unidirektional 1:N public class Projekt implements private int projektid; private String OneToMany(cascade=CascadeType.PERSIST) private Set<Projektauftrag> auftraege; public Projekt(){ auftraege = new HashSet<Projektauftrag>(); // fehlen get- und set-methoden 154

42 Umsetzung unidirektional 1:N (3/4) public void datenanlegen(){ String p[] ={"Hotel", "Noten", "Belegung"; String a[] ={"Analyse", "Modell", "Design"; em.gettransaction().begin(); (); for (int i=0; i<p.length;i++){ Projekt pr= new Projekt(); pr.setname(p[i]); for (int j=0; j<a.length;j++){ Projektauftrag pa= new Projektauftrag(); pa.settitel(a[j]); Set<Projektauftrag> tmp= pr.getauftraege(); tmp.add(pa); em.persist(pr); em.gettransaction().commit(); (); 155

43 Umsetzung unidirektional 1:N (4/4) SELECT PROJEKT.PROJEKTID, PROJEKT.NAME, PROJEKTAUFTRAG.PAID, PROJEKTAUFTRAG.TITEL FROM PROJEKT, PROJEKT_PROJEKTAUFTRAG, PROJEKTAUFTRAG WHERE PROJEKT.PROJEKTID = PROJEKT_PROJEKTAUFTRAG.PROJEKT_PROJEKTID AND PROJEKTAUFTRAG.PAID = PROJEKT_PROJEKTAUFTRAG.AUFTRAEGE_PAID; 156

44 OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE) MERGE : merge() implizit für verknüpfte Objekte aufrufen PERSIST: persist() implizit für verknüpfte Objekte aufrufen REFRESH: refresh() implizit für verknüpfte Objekte aufrufen REMOVE: remove() implizit für verknüpfte Objekte aufrufen ALL: alle vier genannten Möglichkeiten Default-Einstellung: keine der fünf Varianten Wichtige Design-Entscheidung, was sinnvoll ist REMOVE nur nutzbar Beispiel, wenn Cascade.PERSIST fehlte SCHWERWIEGEND: Could not synchronize database state with session org.hibernate.transientobjectexception: object references an unsaved transient instance - save the transient instance before flushing: Projektauftrag 157

45 Umsetzung bidirektional 1:N (1/5) -Bidirektionale Relationen haben Eigentümer (ownerside) und Abhängigen (inverse side) -Eigentümer bei 1:N ist N (hier Projektauftrag) -Abhängiger bekommt mappedby-attribut -Programmierer für Einträge auf beiden Seiten verantwortlich 158

46 Umsetzung bidirektional 1:N public class Projektauftrag implements private int paid; private String ManyToOne(cascade={CascadeType.PERSIST, CascadeType.MERGE) private Mitarbeiter bearbeiter; //

47 Umsetzung bidirektional 1:N public class Mitarbeiter implements Serializable { private static final long serialversionuid = GenerationType.AUTO) private int minr; private String OneToMany(mappedBy="bearbeiter", ", cascade={cascadetype.persist, CascadeType.MERGE) private Set<Projektauftrag> auftraege = new HashSet<Projektauftrag>(); public void auftraghinzu(projektauftrag pa){ getauftraege().add(pa); ); //

48 Umsetzung bidirektional 1:N (4/5) public void mitarbeiterzuordnen(){ Mitarbeiter m[]= {new Mitarbeiter("Egon"), "), new Mitarbeiter("Aische"), "), new Mitarbeiter("Urs"); "); em.gettransaction().begin(); (); for (int i=0; i<m.length; i++) em.persist(m[i]); for (Projektauftrag p : (List<Projektauftrag List<Projektauftrag>) em. createquery("select p FROM Projektauftrag p"). getresultlist()) if(p.gettitel().equals("analyse")){ ")){ JPA 1.0- m[0].auftraghinzu(p); p.setbearbeiter(m[0]); Variante der Anfrage else{ m[1].auftraghinzu(p); p.setbearbeiter(m[1]); em.gettransaction().commit(); (); 161

49 Umsetzung bidirektional 1:N (5/5) SELECT MITARBEITER.NAME, MITARBEITER.MINR, PROJEKTAUFTRAG.TITEL, PROJEKTAUFTRAG.PAID FROM MITARBEITER LEFT JOIN PROJEKTAUFTRAG ON (MITARBEITER.MINR=PROJEKTAUFTRAG.BEARBEITER_MINR) ; 162

50 Umsetzung ist OR-Mapper freigestellt Man sieht, dass bei bidirektionalen Beziehungen in EclipseLinkkeine neuen Tabellen angelegt werden 163

51 Wichtige Annotationen in int version Attribut wird für das optimistische Lockinggenutzt; erst beim Schreiben geschaut, ob sich Versionsnummer geändert hat performant, wenn Objekte nicht häufig geändert werden Einfach als zusätzliches Attribut Basic(fetch=FetchType.LAZY) private Set<Projektauftrag> auftraege EAGER: Alle Daten des Attributs werden bei Objektnutzung sofort in Hauptspeicher geladen (default) LAZY: Daten werden erst geladen, wenn benötigt Längere Listen oder komplexe Daten möglichst immer LAZY (versteckte Konsistenzprobleme möglich) Wenn eine Info sofort benötigt, ist Kette zur Info EAGER 164

52 Umsetzung bidirektional M:N (1/6) 165

53 Umsetzung bidirektional M:N public class Projektauftrag implements private int paid; private String ManyToOne(cascade={CascadeType.PERSIST, CascadeType.MERGE) private Mitarbeiter ManyToOne(cascade={CascadeType.PERSIST, CascadeType.MERGE) private Rolle private int version; 166

54 Umsetzung bidirektional M:N public class Rolle implements private int rid; private String name; private int = {CascadeType.PERSIST CascadeType.PERSIST, = FetchType.LAZY) private List<Mitarbeiter> private int version; public void mitarbeiterhinzu(mitarbeiter m) { List<Mitarbeiter> tmp = getmitarbeiter(); tmp.add(m); setmitarbeiter(tmp); // oder getmitarbeiter().add(m); ); 167

55 Umsetzung bidirektional M:N public class Mitarbeiter implements = GenerationType.AUTO) private int minr; private String = "bearbeiter bearbeiter", cascade = {CascadeType.PERSIST CascadeType.PERSIST, = FetchType.LAZY) private Set<Projektauftrag> = "mitarbeiter mitarbeiter", cascade = {CascadeType.PERSIST CascadeType.PERSIST, = FetchType.LAZY) private Set<Rolle> rollen = new private int version; public void rollehinzu(rolle r) { Set<Rolle> tmp = getrollen(); tmp.add(r); setrollen(tmp); 168

56 Umsetzung bidirektional M:N (5/6) public void mitarbeiterzuordnen() { Mitarbeiter m[] = {new Mitarbeiter("Egon"), "), new Mitarbeiter("Aische"), "), new Mitarbeiter("Urs"); "); em.gettransaction().begin(); (); for (int i = 0; i < m.length; i++) em.persist(m[i]); Rolle r[] = {new Rolle("OOAD",80), new Rolle("SVN",60), new Rolle("QS",100); for (int i = 0; i < r.length; i++) { for(int j = 0; j<m.length; j++) if(r[i].getname().length()<m[j].getname().length()){ ()){ r[i].mitarbeiterhinzu(m[j]); ]); m[j].rollehinzu(r[i]); ]); em.persist(r[i]); // Rollenzuordnung wie bei 1:N mitarbeiterzuordnen() em.gettransaction().commit(); (); 169

57 Umsetzung bidirektional M:N (6/6) 170

58 Tabellenstruktur 171

59 Ungeordnete Daten public class Punkt private int id; private int x; private int private int version; public Punkt(int x, int y) { this.x = x; this.y = y; public public String tostring(){ return "["+x+","+y x+","+y+"]"; +"]"; // get- und set-methoden für Exemplarvariablen Problem: Auch Listen werden ungeordnet gespeichert 172

60 Ungeordnete Daten public class Polygon private int = {CascadeType.PERSIST CascadeType.PERSIST, CascadeType.MERGE) private List<Punkt> punkte= new private int version; public Polygon(){ //get und set für Exemplarvariablen public void punktehinzu(punkt... pkte){ for(punkt p:pkte) public String tostring(){ StringBuffer erg=new StringBuffer("<"); for(punkt p:punkte) erg.append(p.tostring()); ()); return erg.append(">").tostring(); (); 173

61 Ungeordnete Daten (3/4) public class Main { private EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPA20NeueFeaturesPU"); private EntityManager em = emf.createentitymanager(); public void objekteerzeugen(){ Punkt[] pkt={new Punkt(0,0), new Punkt(5,3), new Punkt(3,3), new Punkt(3,0); em.gettransaction().begin(); (); for(punkt p:pkt) em.persist(p); em.gettransaction().commit(); (); Polygon p1 = new Polygon(); p1.punktehinzu(pkt[0],pkt[1],pkt[2]); Polygon p2 = new Polygon(); p2.punktehinzu(pkt[3],pkt[2],pkt[1]); em.gettransaction().begin(); (); em.persist(p1); em.persist(p2); 174

62 Ungeordnete Daten (4/4) public void zeigepolygone(){ List<Polygon> pl = em.createquery( "SELECT p FROM Polygon p",polygon.class).getresultlist(); for(polygon po:pl) System.out.println(po); public void schliessen() { if (em!= null && em.isopen()) em.close(); if (emf!= null && emf.isopen()) emf.close(); public static void main(string[] args) { Main m= new Main(); m.objekteerzeugen(); <[0,0][5,3][3,3]> m.zeigepolygone(); <[3,0][3,3][5,3]> m.schliessen(); System.out.println(" (" "); ---- m= new Main(); <[0,0][5,3][3,3]> m.zeigepolygone(); <[5,3][3,3][3,0]> m.schliessen(); 175

63 Ordnung public class Polygon private int = {CascadeType.PERSIST CascadeType.PERSIST, OrderColumn(name="Ord") ") private List<Punkt> punkte= new private int version; <[3,0][3,3][5,3]> <[0,0][5,3][3,3]> ---- <[3,0][3,3][5,3]> <[0,0][5,3][3,3]> 176

64 Standard: keine Löschfortsetzung (1/2) public void objekteerzeugen() { Punkt[] pkt = {new Punkt(0, 0), new Punkt(5, 3), new Punkt(3, 3); Polygon p1 = new Polygon(); p1.punktehinzu(pkt[0], pkt[1], pkt[2]); em.gettransaction().begin(); (); em.persist(p1); em.gettransaction().commit(); (); public void objektebearbeiten() { Polygon pl = em.createquery("select p FROM Polygon p", Polygon.class).getResultList().get(0); pl.getpunkte().remove(1); em.gettransaction().begin(); (); em.persist(pl); em.gettransaction().commit(); (); 177

65 Standard: keine Löschfortsetzung (2/2) public void zeigepolygoneundpunkte() { for (Polygon po : em.createquery("select p FROM Polygon p", Polygon.class).getResultList()) System.out.println(po); System.out.println(" (" "); for (Punkt pu : em.createquery("select p FROM Punkt p", Punkt.class).getResultList()) System.out.println(pu); public static void main(string[] args) { Main m = new Main(); m.objekteerzeugen(); m.objektebearbeiten(); m.zeigepolygoneundpunkte(); m.schliessen(); <[0,0][3,3]> ---- [0,0] [5,3] [3,3] 178

66 Löschfortsetzung Anmerkung: auch keine Löschung alleine durch CASCADETYPE.ALL in Polygon, aber durch folgende = {CascadeType.ALL CascadeType.ALL, <[0,0][3,3]> orphanremoval=true) OrderColumn(name="Ord") ") [0,0] [3,3] private List<Punkt> punkte = new ArrayList<Punkt>(); Was passiert, wenn mehrere Objekte Punkt referenzieren (widerspricht der Eigentümerschaft)? Exception in thread "main javax.persistence.rollbackexception Caused by: java.sql.sqlintegrityconstraintviolationexception: DELETE in Tabelle 'PUNKT' hat für Schlüssel (3) die Integritätsbedingung tsbedingung 'PLYGONPUNKTPNKTEID' für Fremdschlüssel ssel verletzt. 179

67 Beispieldaten (in DB-Notation, rauslegen) Mitarbeiter Projekt Projektauftrag Rolle Rolle_Mitarbeiter Projekt_Projektauftrag 180

68 Anfragen Anfragesprache soll möglichst Entity-Objekte liefern Anfragesprache soll DB-unabhängig sein (SQL-Detailproblem) Antwort: Java Persistence QL (JPQL) Ermöglicht direkte Zurückgabe von Entitätsobjektlisten Ermöglicht auch direkte Ausführung von SQL-Anfragen Anmerkung: Vorgänger JDO unterstützte OO-Features in JDO- QL (Methodennutzung); dies ist nicht mehr möglich Typische Struktur: SELECT p FROM Projekt p WHERE <Bed Bed> Übersetzung: Wähle aus der Menge Projekt der gemanagetenobjekte die Elemente p mit Eigenschaft <Bed> 181

69 Anfrageausführung Setzt ordentliches tostring() voraus ist nicht typsicher public void anfragen(string ql) { try { Query query = em.createquery(ql); Collection erg = query.getresultlist(); for (Iterator it = erg.iterator(); it.hasnext();) { System.out.println(it.next()); ()); catch (Exception e) { System.out.println("Anfrage gescheitert: " + e.getmessage()); 182

70 Einfache Beispiele Vorbemerkung: In FROM-Zeilenstehen Klassen und Attributnamen; bei diesen muss Groß-und Kleinschreibung beachtet werden! SELECT p FROM Projekt p Projekt Bonitaet (98304) [Konten Historie Raten ] Projekt Bremse (98305) [Display Sensoren Fusion ] Direkter Zugriff auf Attribute SELECT p.name FROM Projekt p Bonitaet Bremse 183

71 Nutzung mehrwertiger Relationen (1/2) SELECT p.auftraege FROM Projekt p Aufgabe Raten (32769) durch Ivan als Java Aufgabe Konten (32770) durch Fatma als Cobol Aufgabe Historie (32772) durch Urs als Java Aufgabe Sensoren (32768) durch Ivan als C Aufgabe Display (32771) durch Fatma als Java Aufgabe Fusion (32773) durch Ivan als C Nicht erlaubt: SELECT p.auftraege.bearbeiter FROM Projekt p An exception occurred while creating a query in EntityManager: Exception Description: Error compiling the query [SELECT p.auftraege.bearbeiter FROM Projekt p], line 1, column 9: invalid navigation expression [p.auftraege.bearbeiter p.auftraege.bearbeiter], cannot navigate collection valued association field [auftraege auftraege]. 184

72 Nutzung mehrwertiger Relationen (2/2) SELECT pa.bearbeiter FROM Projektauftrag pa 1: Ivan Auftraege=[ Sensoren Fusion Raten ] Rollen=[ C Java ] 1: Ivan Auftraege=[ Sensoren Fusion Raten ] Rollen=[ C Java ] 1: Ivan Auftraege=[ Sensoren Fusion Raten ] Rollen=[ C Java ] 3: Fatma Auftraege=[ Konten Display ] Rollen=[ Cobol Java ] 3: Fatma Auftraege=[ Konten Display ] Rollen=[ Cobol Java ] 4: Urs Auftraege=[ Historie ] Rollen=[ Java ] 185

73 Neu zusammengesetzte Ergebnisse Folgende Folie zeigt Details der Ausgabe SELECT r.name, r.tagessatz FROM Rolle r [Ljava.lang.Object;@1db5ec :: [Ljava.lang.Object Ljava.lang.Object; C 50 [Ljava.lang.Object;@92b1a1 :: [Ljava.lang.Object Ljava.lang.Object; Java 60 [Ljava.lang.Object;@cbf9bd :: [Ljava.lang.Object Ljava.lang.Object; Cobol

74 Ausgabe mit detaillierterer Analyse public void anfragen2(string ql) { System.out.println(ql); try { Query query = em.createquery(ql); Collection erg = query.getresultlist(); for (Iterator it = erg.iterator(); it.hasnext();) { Object o = it.next(); System.out.println(o+" :: "+ o.getclass().getname()); ()); if(o.getclass().getname().equals("[ljava.lang.object;")){ Object oa[]= (Object Object[]) o; for(int i=0;i<oa.length;i++) System.out.println(" "+oa[i oa[i]); catch (Exception e) { System.out.println("Anfragefehler: " + e.getmessage()); 187

75 JOIN-Varianten SELECT m.name FROM Projektauftrag pa, Mitarbeiter m WHERE pa.bearbeiter=m AND pa.titel='sensoren' SELECT m.name FROM Projektauftrag pa JOIN pa.bearbeiter m WHERE pa.titel='sensoren' Ivan SELECT DISTINCT(pa.bearbeiter.name) FROM Projekt p JOIN p.auftraege pa WHERE p.name='bremse' Fatma Ivan 188

76 Vordefinierte Anfragen + typisches Problem private static final String PROJEKT_VON= "SELECT DISTINCT(p.name) " +"FROM Projekt p JOIN p.auftraege pa " +"WHERE pa.bearbeiter.name= :mname mname"; public void projektvon(string name){ Query query = em.createquery(projekt_von). setparameter("mname", ", name); Collection erg = query.getresultlist(); for (Iterator it = erg.iterator(); it.hasnext();) { System.out.println(it.next()); ()); projektvon("urs' OR NOT(p.name=' ='bla bla') OR p.name=' ='bla bla") Bremse Bonitaet 189

77 echte Standardkonformität? gerade bei Anfragen häufig keine 100%-Kompatibilität Hibernate meist etwas mächtiger als EclipseLink Beispiel: Zeige alle C-Programmierer geht: SELECT m FROM Rolle r JOIN r.mitarbeiter m WHERE r.name='c ='C [1: Ivan... geht nicht in EclipseLink: SELECT m FROM Mitarbeiter m JOIN m.rollen r WHERE r.name='c' invalid navigation expression [r.name r.name], cannot navigate expression [r] of type [java.util.list java.util.list] inside a query. trotzdem: Immer sinnvoll Objektauswahlenin Anfragesprache durchzuführen, nicht alle Objekte aus DB lutschen und dann verarbeiten 190

78 Klassische SQL-Operatoren SELECT p.name, COUNT(pa.titel) FROM Projekt p JOIN p.auftraege pa GROUP BY p.name [Ljava.lang.Object;@4a9a7d :: [Ljava.lang.Object Ljava.lang.Object; Bonitaet 3 [Ljava.lang.Object;@1e4a47e :: [Ljava.lang.Object Ljava.lang.Object; Bremse 3 Erinnerung AVG, SUM, MIN, MAX 191

79 Named NamedQueries({ //in Mitarbeiter (geht noch nicht in NamedQuery(name="Mitarbeiter.primaryKey", ", query="select m FROM Mitarbeiter m WHERE m.minr= :minr NamedQuery(name="Mitarbeiter.mitFaehigkeit", ", query="select m FROM Rolle r JOIN r.mitarbeiter m" +" WHERE r.name = :name name") ) // z. B. in Main mit lokalen Variablen minr und faehigkeit Mitarbeiter m= em.createnamedquery("mitarbeiter.primarykey createnamedquery("mitarbeiter.primarykey",mitarbeiter.class Mitarbeiter.class).setParameter("minr setparameter("minr", ", minr).getsingleresult getsingleresult(); for( Mitarbeiter m:em.createnamedquery("mitarbeiter.mitfaehigkeit createnamedquery("mitarbeiter.mitfaehigkeit",mitarbeiter.class Mitarbeiter.class).setParameter("name setparameter("name", ", faehigkeit).getresultlist getresultlist()) System.out.println(m); 192

80 Flexiblere Anfragenkonstruktion (Ausblick) public void ooartigeanfragekonstruktion(){ CriteriaBuilder qb = em.getcriteriabuilder(); CriteriaQuery<Mitarbeiter> cq = qb.createquery(mitarbeiter.class); Root<Mitarbeiter> malias= cq.from(mitarbeiter.class); cq.where(qb.notequal(malias.get("name"), "), "Urs")); TypedQuery<Mitarbeiter> tq=em.createquery(cq); for(mitarbeiter m:tq.getresultlist()) System.out.println(m.getName()); ()); Ivan Fatma Heinz 193

81 Vererbung eine Tabelle public class Produkt implements private int prnr; private String name; private int lagermenge; private float private int public class Lebensmittel extends Produkt implements private Date public class Buch extends Produkt{

82 Vererbung eine Tabelle (2/3) public static void main(string[] args) { EntityManagerFactory emf =Persistence Persistence. createentitymanagerfactory("jpavererbungpu"); "); EntityManager em=emf.createentitymanager(); em.gettransaction().begin(); (); em.persist(new Buch("JPA", ", 2, 39.99f)); em.persist(new Produkt("Maus", ", 4, 7.99f)); em.persist(new Lebensmittel("Tofu", ", 7, 0.69f,new Date())); em.gettransaction().commit(); (); for(produkt p:(list<produkt>)em. createquery("select p FROM Produkt p").getresultlist()) System.out.println(p); 1:JPA Menge:2 Preis:39.99 Buch 2:Maus Menge:4 Preis:7.99 3:Tofu Menge:7 Preis:0.69 Verfall:Thu Oct 15 16:22:14 CEST

83 Vererbung eine Tabelle (3/3) SELECT * FROM Produkt Abbildung in eine Tabelle ist Default-Einstellung Ansatz meist am performantesten (float ungeeignet für Geldbeträge) 196

84 Vererbung getrennte Inheritance(strategy=InheritanceType.JOINED) public class Produkt implements Serializable {... SELECT * FROM Produkt SELECT * FROM Lebensmittel SELECT * FROM Buch 197

85 Vererbung public class Produkt implements Serializable {... SELECT * FROM Produkt SELECT * FROM Lebensmittel SELECT * FROM Buch 198

86 Software-Architektur sinnvoll: Datenzugriff kapseln typisch mehrere DAO-Klassen entsteht Datenzugriffskomponente 199

87 Einbindung von Bean-Validation Annotationen bereits Angabe bestimmter Randbedingungen klarerer Ansatz: Trennung von Beschreibung des Objektgraphen (wer mit wem) von Validierung Bean-Validationkann zusammen mit JPA genutzt werden; Anwesenheit von Validatoren wird von EntityManagern genutzt Ansatz: Wenn Daten in DB persistiertwerden sollen, werden alle Validierungsregeln geprüft (nicht eher); bei Fehler wird Exception geworfen Zukunft: Standards werden noch enger verknüpft Beispiel: externe Programmierernamen beginnen mit X, müssen vorgegebene Sprachen können 200

88 Beispiel: JPA Sprachen") public class Mitarbeiter implements = GenerationType.AUTO) private message="echter Nachname") private String = "bearbeiter bearbeiter", cascade = {CascadeType.PERSIST CascadeType.PERSIST, = message="max 3 Auftraege") private Set<Projektauftrag> auftraege = new = "mitarbeiter mitarbeiter", cascade = {CascadeType.PERSIST CascadeType.PERSIST, = message="max 2 Rollen") private List<Rolle> rollen = new ArrayList<Rolle>(); //

89 Beispiel: JPA mit = MrXProgrammer { String message() default "Moduleintrag kaputt"; Class<?>[] groups() default {; Class<? extends Payload>[] payload() default {; String[] sprachen() default {; 202

90 Beispiel: JPA mit Bean-Validation(3/5) public class MrXValidator implements ConstraintValidator<MrXProgrammer, Mitarbeiter> { private String[] muss; public void initialize(mrxprogrammer a) { muss = a.sprachen(); public boolean isvalid(mitarbeiter t, ConstraintValidatorContext cvc) { System.out.println("Pruefe fuer "+t.getname t.getname()); if(!t.getname().startswith("x")) ")) return true; List<Rolle> rollen = t.getrollen(); for (Rolle r : rollen) for (String s : muss) if (r.getname().equals(s r.getname().equals(s)) )) return true; return false; 203

91 Beispiel: JPA mit Bean-Validation(4/5) public void beispieldaten(){ Mitarbeiter m1 = new Mitarbeiter("XUrs"); "); Rolle[] r= { new Rolle("Java", ", 60),new Rolle("C", ", 50); for(int i=0;i<r.length;i++) m1.rollehinzu(r[i]); System.out.println(m1); try { em.gettransaction().begin(); (); em.persist(m1); em.gettransaction().commit(); (); catch (ConstraintViolationException e) { System.out.println(e.getMessage()); ()); for(constraintviolation c:e.getconstraintviolations()) System.out.println(c.getMessage()); ()); em.gettransaction().rollback(); (); 0: XUrs Auftraege=[ ] Rollen=[ Java C ] Pruefe fuer XUrs 204

92 Beispiel: JPA mit Bean-Validation(5/5) public void beispieldaten(){ Mitarbeiter m1 = new Mitarbeiter("X"); "); Rolle[] r= { new Rolle("C++", 60),new Rolle("C", ", 50), new Rolle("Cobol", ", 70); for(int i=0;i<r.length;i++) m1.rollehinzu(r[i]); System.out.println(m1); try { em.gettransaction().begin(); (); em.persist(m1); em.gettransaction().commit(); (); catch (ConstraintViolationException e) { for(constraintviolation c:e.getconstraintviolations()) System.out.println(c.getMessage()); ()); em.gettransaction().rollback(); (); 0: X Auftraege=[ ] Rollen=[ C++ C Cobol ] Pruefe fuer X echter Nachname aktuelle Sprachen max 2 Rollen 205

93 Interessante weitere Features in JPA in Anfrage-Sprache Funktionen auf Datentypen z. B. SUBSTRING(String,Start,Ende) UPDATE und DELETE in Querys immer vor/nach Persistierung ausgeführte Methoden Compound PrimaryKeys, zusammengesetzte Schlüssel über Hilfsklassen nutzbar Column(name="PIC") ") private JoinTable(name="PROJEKTROLLEN", ", ROLLEN_ID ROLLEN_ID"), ")) 206

Kardinalitäten. Komponentenbasierte Software- Entwicklung. Prof. Dr. Stephan Kleuker

Kardinalitäten. Komponentenbasierte Software- Entwicklung. Prof. Dr. Stephan Kleuker Kardinalitäten in JPA A x 1:1 zu einem A-Objekt gehört (maximal) ein anderes B- Objekt, die jeweils zu (maximal) einem A-Objekt gehören 1:N zu einem A-Objekt gehören beliebig viele B-Objekte, die jeweils

Mehr

Kardinalitäten. Umsetzung unidirektional 1 : N ( 3 / 4 )

Kardinalitäten. Umsetzung unidirektional 1 : N ( 3 / 4 ) Kardinalitäten in JPA Umsetzung unidirektional 1 : N ( 1 / 4 ) A x 1:1 zu einem A-Objekt gehört (maximal) ein anderes B- Objekt, die jeweils zu (maximal) einem A-Objekt gehören 1:N zu einem A-Objekt gehören

Mehr

Literatur. 3. Java Persistence API ( JPA)

Literatur. 3. Java Persistence API ( JPA) 3. Java Persistence API ( JPA) Problem: OO in relationale DB Idee des Persistence Mapper Einfache Entity-Klasse Lebenslauf eines Entity-Objekts Umsetzung von 1:N- und M:N-Relationen Konsistenzüberwachung

Mehr

Literatur. 4. Java Persistence API (JPA) Nutzung relationaler DB in OO-Programmen. Klassische Wege zur Verbindung SW und DB

Literatur. 4. Java Persistence API (JPA) Nutzung relationaler DB in OO-Programmen. Klassische Wege zur Verbindung SW und DB 4. Java Persistence API (JPA) Problem: OO in relationale DB Idee des Persistence Mapper Einfache Entity-Klasse Lebenslauf eines Entity-Objekts Umsetzung von 1:N- und M:N-Relationen Geordnete Daten Anfragen

Mehr

Weitergehende Validierungsansätze

Weitergehende Validierungsansätze Weitergehende Validierungsansätze Zusammenfassen von Constraints @Constraint(validatedBy={) @Min(10000) @Max(99999) public @interface GueltigeMatrikelnummer {... Constraints für Parameter und Rückgabewerte

Mehr

4. Java Persistence API (JPA) Weitergehende Validierungsansätze. Literatur. Klassische Wege zur Verbindung SW und DB

4. Java Persistence API (JPA) Weitergehende Validierungsansätze. Literatur. Klassische Wege zur Verbindung SW und DB Weitergehende Validierungsansätze Zusammenfassen von Constraints @Constraint(validatedBy={) @Min(10000) @Max(99999) public @interface GueltigeMatrikelnummer {... Constraints für Parameter und Rückgabewerte

Mehr

3. Java Persistence API (JPA)

3. Java Persistence API (JPA) 3. Java Persistence API (JPA) Idee des Persistence Mapper Einfache Entity-Klasse Lebenslauf eines Entity-Objekts Umsetzung von 1:N- und M:N-Relationen Geordnete Daten Anfragen Vererbung Validierung 125

Mehr

5. Java Persistence API (JPA)

5. Java Persistence API (JPA) 5. Java Persistence API (JPA) Idee des Persistence Mapper Einfache Entity-Klasse Lebenslauf eines Entity-Objekts Umsetzung von 1:N- und M:N-Relationen Geordnete Daten Anfragen Vererbung Validierung 218

Mehr

4. Java Persistence API (JPA)

4. Java Persistence API (JPA) 4. Java Persistence API (JPA) Problem: OO in relationale DB Idee des Persistence Mapper Einfache Entity-Klasse Lebenslauf eines Entity-Objekts Umsetzung von 1:N- und M:N-Relationen Geordnete Daten Anfragen

Mehr

Probleme bei der Nutzung der Bean Validation in JPA

Probleme bei der Nutzung der Bean Validation in JPA Probleme bei der Nutzung der Bean Validation in JPA Die aktuelle Netbeans-Installation 6.9.1 bietet als JPA-Realisierung EclipseLink in der Version 2.0.2, die in der Zusammenarbeit mit der Referenzimplementierung

Mehr

4. Java Persistence API (JPA)

4. Java Persistence API (JPA) 4. Java Persistence API (JPA) Problem: OO in relationale DB Idee des Persistence Mapper Einfache Entity-Klasse Lebenslauf eines Entity-Objekts Umsetzung von 1:N- und M:N-Relationen Geordnete Daten Anfragen

Mehr

Datenzugriffskomponente mit JPA 2.1

Datenzugriffskomponente mit JPA 2.1 Datenzugriffskomponente mit JPA 2.1 (Grundlagen der Java Persistence Architecture) Vladislav Faerman Gliederung Einführung Konfiguration Objekt-Relationales Mapping (ORM) mit JPA Das zentrale Konzept der

Mehr

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

Datenbankpraktikum, Gruppe F. JPA mit Hibernate. Alexander Stautner, Harald Zauner, Sascha Schreier JPA mit Hibernate Alexander Stautner, Harald Zauner, Sascha Schreier Agenda Objektrelationales Mapping JPA / Hibernate Demo # 2 Objektrelationales Mapping Objektorientierte Welt Objekte Objektidentität

Mehr

Java Persistence API. Phillip Ghadir Oliver Tigges

Java Persistence API. Phillip Ghadir Oliver Tigges Phillip Ghadir phillip.ghadir@innoq.com Oliver Tigges oliver.tigges@gmx.de Was wissen Sie in 45 Minuten? Wie man mit JPA entwickelt. Dass wir viele Eigenschaften von JPA ausgelassen haben. Dass Sie nicht

Mehr

3. Java Persistence API (JPA)

3. Java Persistence API (JPA) 3. Java Persistence API (JPA) Idee des Persistence Mapper Einfache Entity-Klasse Lebenslauf eines Entity-Objekts Umsetzung von 1:N- und M:N-Relationen Geordnete Daten Anfragen Vererbung Validierung 113

Mehr

Inhaltsverzeichnis. Bernd Müller, Harald Wehr. Java Persistence API 2. Hibernate, EclipseLink, OpenJPA und Erweiterungen ISBN:

Inhaltsverzeichnis. Bernd Müller, Harald Wehr. Java Persistence API 2. Hibernate, EclipseLink, OpenJPA und Erweiterungen ISBN: Inhaltsverzeichnis Bernd Müller, Harald Wehr Java Persistence API 2 Hibernate, EclipseLink, OpenJPA und Erweiterungen ISBN: 978-3-446-42693-1 Weitere Informationen oder Bestellungen unter http://www.hanser.de/978-3-446-42693-1

Mehr

Enterprise JavaBeans Überblick

Enterprise JavaBeans Überblick Enterprise JavaBeans Überblick 1. Überblick Java EE 5 und Komponententechnologien 2. Einführung Java EE 5 Plattform 3. Enterprise JavaBeans Architektur 4. Ressourcen Management und Primäre Services 6.

Mehr

Softwareentwicklung mit Enterprise JAVA Beans

Softwareentwicklung mit Enterprise JAVA Beans Softwareentwicklung mit Enterprise JAVA Beans JPA - JAVA Persistence API Problem In JAVA-programmen arbeitet man mit Hauptspeicherobjekten. Nach Beendigung des Programmes sind diese nicht mehr vorhanden.

Mehr

OR-Mapping. WS2008/2009 DBIS/Dr. Karsten Tolle

OR-Mapping. WS2008/2009 DBIS/Dr. Karsten Tolle OR-Mapping Zwei Paradigmen treffen aufeinander Gegensätze OO vs. Relational: Stichwort: O/R Impedance Mismatch Person Tabellen mit Schlüssel und Fremdschlusselbeziehungen. Abt-Nr. beschäftigt Pk-Nr Name

Mehr

Übungsaufgabe Transaktion als Middleware

Übungsaufgabe Transaktion als Middleware Übungsaufgabe Transaktion als Middleware und Java Persistence API Client/Server Abstraktes Komponentenmodell Entscheidende Punkte Erweiterung der Invoke-Methode Context-Verwaltung Transaktionsbehandlung

Mehr

Enterprise JavaBeans Überblick: 10. Queries Interface Query 10.2 EJB Query Language 10.3 Named Queries

Enterprise JavaBeans Überblick: 10. Queries Interface Query 10.2 EJB Query Language 10.3 Named Queries Enterprise JavaBeans Überblick 1. Überblick Komponententechnologien 2. Einführung 3. Enterprise JavaBeans Architektur 4. Ressourcen Management und Primäre Services 5. Java Persistence: Entity Manager 6.

Mehr

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

Workshop Java Webentwicklung Einführung in Hibernate. Ulrich Stärk Workshop Java Webentwicklung Einführung in Hibernate Ulrich Stärk Ablauf Montag bis Donnerstag 09:00 Uhr s.t. Beginn, bis ca. 17:00 Uhr 1 Stunde Mittagspause Donnerstag Experiment Aufzeichnung der Programmiertätigkeit

Mehr

Eclipse und EclipseLink

Eclipse und EclipseLink Eclipse und EclipseLink Johannes Michler Johannes.Michler@promatis.de PROMATIS, Ettlingen Zugriff auf Oracle Datenbanken aus Eclipse RCP Anwendungen via EclipseLink 18.09.2009 1 Gliederung Eclipse als

Mehr

Persistenz. Ralf Gitzel

Persistenz. Ralf Gitzel Persistenz Ralf Gitzel ralf_gitzel@hotmail.de 1 Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht Grundkonzepte Entity Beans Meine erste Entity Entity-Manager Lernziele Übungsaufgabe 3 Grundkonzepte

Mehr

Java-Persistenz-Architekturen. Freiberuflicher Entwickler und Autor. DOAG Konferenz 1.12.

Java-Persistenz-Architekturen. Freiberuflicher Entwickler und Autor.   DOAG Konferenz 1.12. Java-Persistenz-Architekturen Rudolf Jansen Freiberuflicher Entwickler und Autor http://www.rudolf-jansen.de info@rudolf-jansen.de DOAG Konferenz 1.12.2008 Inhalt JDBC JPA (Java Persistence API) Spring

Mehr

2. Reflexion und Annotationen

2. Reflexion und Annotationen 2. Reflexion und Annotationen Reflexion Annotationskonzept Erstellung eigener Annotationen Annotationen mit Reflexion nutzen Annotation Processing 78 Reflexion auch Introspektion, engl. reflection Reflexion

Mehr

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

Java Persistence API 2.x. crud + relationships + jp-ql 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.

Mehr

Objektorientierte Datenbanken

Objektorientierte Datenbanken Objektorientierte Datenbanken Ralf Möller, FH-Wedel z Beim vorigen Mal: y Java Data Objects Teil 1 z Heute: y Java Data Objects Teil 2 z Lernziele: y Grundlagen der Programmierung persistenter Objekte

Mehr

Java Persistence API mit Hibernate

Java Persistence API mit Hibernate Seminarunterlage Version: 6.02 Version 6.02 vom 4. April 2018 Dieses Dokument wird durch die veröffentlicht.. Alle Rechte vorbehalten. Alle Produkt- und Dienstleistungs-Bezeichnungen sind Warenzeichen

Mehr

OO Programmiersprache vs relationales Model. DBIS/Dr. Karsten Tolle

OO Programmiersprache vs relationales Model. DBIS/Dr. Karsten Tolle OO Programmiersprache vs relationales Model Vorgehen bisher Erstellen eines ER-Diagramms Übersetzen in das relationale Datenmodell Zugriff auf das relationale Datenmodell aus z.b. Java ER rel. Modell OO

Mehr

Enterprise JavaBeans Überblick

Enterprise JavaBeans Überblick Enterprise JavaBeans Überblick 1. Überblick Java EE 5 und Komponententechnologien 2. Einführung Java EE 5 Plattform 3. Enterprise JavaBeans Architektur 4. Ressourcen Management und Primäre Services 5.

Mehr

Objektrelationales Mapping mit EclipseLink und Spring. Stefan Scheidt OPITZ CONSULTING GmbH

Objektrelationales Mapping mit EclipseLink und Spring. Stefan Scheidt OPITZ CONSULTING GmbH Objektrelationales Mapping mit EclipseLink und Spring Stefan Scheidt OPITZ CONSULTING GmbH Ihr Referent Stefan Scheidt Senior Architekt bei der OPITZ CONSULTING GmbH Seit über 10 Jahren im Oracle- und

Mehr

Persistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten)

Persistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten) Persistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten) O/R Mapping - Objekte (Attribute) - 1:1, 1:n, n:m Beziehungen - Vererbungen (- Interfaces)

Mehr

Objektorientierte Datenbanken

Objektorientierte Datenbanken Objektorientierte Datenbanken Ralf Möller, FH-Wedel z Beim vorigen Mal: y Java Data Objects Teil 2, Queries z Heute: y Java Data Objects Teil 3, Objektidentität z Lernziele: y Grundlagen der Programmierung

Mehr

Christian Kühl. Von JDO zu JPA Entwicklung einer Migrationsstrategie

Christian Kühl. Von JDO zu JPA Entwicklung einer Migrationsstrategie Christian Kühl Von JDO zu JPA Entwicklung einer Migrationsstrategie Inhalt JDO und JPA Motivation Was muss migriert werden? Strategien Architektur Beispiel Migration am Beispiel Automatisierung Probleme

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form

Mehr

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen Teil 5 - Java Programmstruktur Operatoren Schlüsselwörter Datentypen 1 Kommentare in Java In Java gibt es drei Möglichkeiten zur Kommentierung: // Kommentar Alle Zeichen nach dem // werden ignoriert. für

Mehr

II.4.4 Exceptions - 1 -

II.4.4 Exceptions - 1 - n 1. Unterklassen und Vererbung n 2. Abstrakte Klassen und Interfaces n 3. Modularität und Pakete n 4. Ausnahmen (Exceptions) n 5. Generische Datentypen n 6. Collections II.4.4 Exceptions - 1 - Ausnahmen

Mehr

Kapitel 14. Objekt-relationales Mapping (ORM) mit Hibernate bzw. Java Persistance API (JPA) Prof. Dr. Wolfgang Weber Vorlesung Datenbanken

Kapitel 14. Objekt-relationales Mapping (ORM) mit Hibernate bzw. Java Persistance API (JPA) Prof. Dr. Wolfgang Weber Vorlesung Datenbanken Kapitel 14 Objekt-relationales Mapping (ORM) mit Hibernate bzw. Java Persistance API (JPA) 1 Wozu Objekt-relationales Mapping? - Problematik - Business-Schicht OO-Klassen Unvereinbarkeit der Paradigmen

Mehr

Rene Böing, Alexander Kuhn, Marc Wilmes Einführung in Spring und Hibernate

Rene Böing, Alexander Kuhn, Marc Wilmes Einführung in Spring und Hibernate 1 von 43 Rene Böing, Alexander Kuhn, Marc Wilmes Einführung in Spring und Hibernate 27.11.11 Agenda Einleitung Ist-Zustand Bookstore Was ist Hibernate? Wie funktioniert Hibernate? Was ist Spring? Architektur

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 22 Einstieg in die Informatik mit Java Grundlagen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 22 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White

Mehr

2. Bean Validation. Java Bean

2. Bean Validation. Java Bean 2. Bean Validation Java Bean Annotationen zur Validierung von Java Beans Auswertung von Bean Annotationen Gruppierung von Bean Annotationen Erstellung eigener Bean Annotationen 80 Java Bean Ist die Spezifikation

Mehr

Wir wollen in einer Bank die Konten der Kunden modellieren (um sie dann entspr. zu verarbeiten

Wir wollen in einer Bank die Konten der Kunden modellieren (um sie dann entspr. zu verarbeiten Noch ein Beispiel Wir wollen in einer Bank die Konten der Kunden modellieren (um sie dann entspr. zu verarbeiten public class Konto { private String kundenname; private double kontostand; private double

Mehr

Java Persistence Puzzlers

Java Persistence Puzzlers Die Spielregeln 1. Mappings 2. Das API 3. Abfragen Vielen Dank! Frank Schwarz, buschmais GbR Java Forum Stuttgart Java Persistence Puzzlers Wie funktioniert es? Ich frage. Sie antworten. package application;

Mehr

Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester / 39

Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester / 39 Programmieren II Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2010 1 / 39 Objekt-relationales Mapping 2 / 39 Objekt-relationales Mapping Mit JDBC kann Java sich mit relationalen Datenbanken verbinden.

Mehr

Vesant JDO Genie für transparente Persistenz mit relationalen Datenbanken.

Vesant JDO Genie für transparente Persistenz mit relationalen Datenbanken. Vesant JDO Genie für transparente Persistenz mit relationalen Datenbanken. Martin Wessel Senior Pre-Sales Consultant Versant GmbH mailto: Martin.Wessel@versant.net Copyright Versant Europe 2004. All products

Mehr

Grundelemente objektorientierter Sprachen (1)

Grundelemente objektorientierter Sprachen (1) Grundelemente objektorientierter Sprachen (1) Objekt Repräsentation eines Objektes der realen Welt in der Terminologie objektorientierter Programmiersprachen besitzen Attribute (Eigenschaften), deren Werte

Mehr

Algorithmen und Datenstrukturen 06

Algorithmen und Datenstrukturen 06 31. Mai 2012 1 Besprechung Blatt 5 Fragen 2 Objektorientierte Programmierung Allgemein Sichtbarkeit Konstanten 3 Unified Modeling Language (UML) Klassendiagramme Anwendungsfalldiagramme 4 Vorbereitung

Mehr

Java-Persistence-API mit Hibernate

Java-Persistence-API mit Hibernate Bernd Müller, Harald Wehr Java-Persistence-API mit Hibernate Standardisierte Persistenz f Г- Щ.4 1 fl/j J ; Щ Ш Ш ADDISON-WESLEY An imprint of Pearson Education München Boston San Francisco Harlow, England

Mehr

Grundelemente objektorientierter Sprachen (1)

Grundelemente objektorientierter Sprachen (1) Grundelemente objektorientierter Sprachen (1) Objekt Repräsentation eines Objektes der realen Welt in der Terminologie objektorientierter Programmiersprachen besitzen Attribute (Eigenschaften), deren Werte

Mehr

Java Database Connectivity (JDBC) zum Zugriff aus in z.b. in Java geschriebenen Applikationen

Java Database Connectivity (JDBC) zum Zugriff aus in z.b. in Java geschriebenen Applikationen Rückblick Java Database Connectivity (JDBC) zum Zugriff aus in z.b. in Java geschriebenen Applikationen JDBC erlaubt Transaktionskontrolle, d.h. Festschreiben und Zurückrollen sowie setzten der Isolationsstufe

Mehr

Enterprise JavaBeans Überblick

Enterprise JavaBeans Überblick Enterprise JavaBeans Überblick 1. Überblick Java EE 5 und Komponententechnologien 2. Einführung Java EE 5 Plattform 3. Enterprise JavaBeans Architektur 4. Ressourcen Management und Primäre Services 5.

Mehr

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke Institut für Programmierung und Reaktive Systeme Java 6 Markus Reschke 13.10.2014 OOP Objekte = Verhalten (durch Methoden) + Daten (durch Attribute) Klassen = Baupläne für Objekte Kapselung von Programmteilen

Mehr

Theorie zu Übung 8 Implementierung in Java

Theorie zu Übung 8 Implementierung in Java Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Theorie zu Übung 8 Implementierung in Java Klasse in Java Die Klasse wird durch das class-konzept

Mehr

Play Framework, MySQL, JPA, HQL, HTML, jquery,

Play Framework, MySQL, JPA, HQL, HTML, jquery, Play Framework, MySQL, JPA, HQL, HTML, jquery, Wer Mit wem Resultat 1.Kunde Schalter: Bibliothekarin Bestimmt,welcher Archivar die Zeitschrift holen geht 2. Schalter: Bibliothekarin Archivar Kontrollübergabe

Mehr

Gregor Raschke 2008 HIBERNATE. Eine Einführung

Gregor Raschke 2008 HIBERNATE. Eine Einführung 1 HIBERNATE Eine Einführung Inhalt 2 Einleitung Beispielkonfiguration Die hibernate.cfg.xml Eine Beispieltransaktion Abfragemöglichkeiten JPA und Hibernate Ressourcen und Quellen Einleitung (1) - Geschichtliches

Mehr

EINFÜHRUNG IN DIE PROGRAMMIERUNG

EINFÜHRUNG IN DIE PROGRAMMIERUNG EINFÜHRUNG IN DIE PROGRAMMIERUNG OBJEKTORIENTIERTES PROGRAMMIEREN Tobias Witt 25.03.2014 10:30-12:00 Täglich Übungen zur Vertiefung Laptop hier nicht erforderlich Aber in den Übungen! Linux, OS X http://hhu-fscs.de/linux-install-party/

Mehr

9. Ausnahmebehandlung

9. Ausnahmebehandlung Schwerpunkte Ausnahmen und Laufzeitfehler 9. Ausnahmebehandlung Java-Beispiele: Ausnahme.java TryCatch.java TryCatchAll.java Finally.java TryInTry.java KeyboardTry.java Oeffnungszeit.java Stack-Trace Java-Ausnahmeklassen-Hierarchie

Mehr

Repetitorium Informatik (Java)

Repetitorium Informatik (Java) Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen

Mehr

Durch die Möglichkeit, Ein- und Ausgaben auf der Konsole durchzuführen, kann man auch systematisch das Verhalten von Klassen analysieren.

Durch die Möglichkeit, Ein- und Ausgaben auf der Konsole durchzuführen, kann man auch systematisch das Verhalten von Klassen analysieren. Durch die Möglichkeit, Ein- und Ausgaben auf der Konsole durchzuführen, kann man auch systematisch das Verhalten von Klassen analysieren. 267 Das hier skizzierte Problem basiert auf der strategischen Entscheidung

Mehr

Objektorientierte Datenbanken

Objektorientierte Datenbanken OODB 8 Slide 1 Objektorientierte Datenbanken Vorlesung 8 Sebastian Iwanowski FH Wedel OODB 8 Slide 2 Offene Fragen vom letzten Mal: Kann man in einer JDOQL-Anfrage Elemente herausfiltern, deren Attribute

Mehr

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik Programmieren II Innere Klassen Heusch 10, 13.10 Ratz 5.2.1, 9.8 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Innere Klassen Bisher kennen wir nur Klassen, die entweder zusammen

Mehr

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen 16OH21005 gefördert. Die Verantwortung für den Inhalt dieser

Mehr

Analyse und praktischer Vergleich von neuen Access- Layer-Technologien in modernen Webanwendungen unter Java. Oliver Kalz

Analyse und praktischer Vergleich von neuen Access- Layer-Technologien in modernen Webanwendungen unter Java. Oliver Kalz Analyse und praktischer Vergleich von neuen Access- Layer-Technologien in modernen Webanwendungen unter Java Oliver Kalz Agenda Grundlagen Objektpersistenz Objektrelationales Mapping Performance Fazit

Mehr

12 Abstrakte Klassen, finale Klassen und Interfaces

12 Abstrakte Klassen, finale Klassen und Interfaces 12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,

Mehr

Interface. So werden Interfaces gemacht

Interface. So werden Interfaces gemacht Design Ein Interface (=Schnittstelle / Definition) beschreibt, welche Funktionalität eine Implementation nach Aussen anzubieten hat. Die dahinter liegende Algorithmik wird aber der Implementation überlassen.

Mehr

Unsere Webapplikation erweitern

Unsere Webapplikation erweitern Unsere Webapplikation erweitern Um mit Play zu arbeiten: 1. Starten Sie zunächst den MySQL-Server. Führen Sie dazu auf dem USB-Stick mysql_start.cmd aus. 2. Sie brauchen eine Windows-Kommandozeile: Starten

Mehr

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3 Programmieren mit Java Modul 5 Objekte Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Klassen und Objekte 3 2.1 Klassen.................................... 4 2.2 Objektvariablen und Methoden.......................

Mehr

Algorithmen und Datenstrukturen 07

Algorithmen und Datenstrukturen 07 (7. Juni 2012) 1 Besprechung Blatt 6 Fragen 2 Referenzen Referenzsemantik 3 Vererbung Allgemein abstract Interfaces Vererbung in UML 4 Vorbereitung Blatt 7 Anmerkungen Fragen Fragen zu Blatt 6? Referenzsemantik

Mehr

Informatik B. Vorlesung 14 Serialisierung, Autoboxing. Dr. Ralf Kunze

Informatik B. Vorlesung 14 Serialisierung, Autoboxing. Dr. Ralf Kunze Vorlesung 14 Serialisierung, Autoboxing 1 Serialisierung von Objekten Die Objekte innerhalb eines Java-Programmes sollen manchmal auch nach Beendigung der JVM verfügbar bleiben Objekte müssen ab und an

Mehr

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke Java 2 Markus Reschke 07.10.2014 Datentypen Was wird gespeichert? Wie wird es gespeichert? Was kann man mit Werten eines Datentyps machen (Operationen, Methoden)? Welche Werte gehören zum Datentyp? Wie

Mehr

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen? Generic Programming without Generics from JAVA5 Motivation Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen? Ein Bespiel: sie haben bereits eine Klasse zur Multiplikation von Matrizen

Mehr

Open-Source Transparente Persistence (keine Interfaces, keine Ober- Klassen) Caching

Open-Source Transparente Persistence (keine Interfaces, keine Ober- Klassen) Caching 1 Was ist Hibernate Hibernate ist ein Open-Source-Java-Persistenz-Framework für relationale Datenbanken Persistenz-Frameworks: kapseln und abstrahiert den Zugriff auf eine Speicherschicht -> Zwischenschicht

Mehr

Auf dieser und den beiden folgenden Folien wurde jeweils ein neues Objekt der Klasse FigurMalerei erstellt und die angegebene Methode ausgeführt.

Auf dieser und den beiden folgenden Folien wurde jeweils ein neues Objekt der Klasse FigurMalerei erstellt und die angegebene Methode ausgeführt. 432 433 434 435 Auf dieser und den beiden folgenden Folien wurde jeweils ein neues Objekt der Klasse FigurMalerei erstellt und die angegebene Methode ausgeführt. 436 437 438 439 440 441 442 443 Die verkürzte

Mehr

5. Übung zu Software Engineering

5. Übung zu Software Engineering 5. Übung zu Software Engineering WS 2009/2010 Henning Heitkötter Desktop-Anwendung AUFGABE 13 1 Schichtenarchitektur Strukturierung komplexer Anwendungen Anforderungen: Flexibilität, Robustheit, Wartbarkeit,

Mehr

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung Studiengang Medieninformatik Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 1 15.03.2017 Objektorientierte Programmierung (Studiengang Medieninformatik) Form: Prüfung:

Mehr

Vorkurs Informatik WiSe 17/18

Vorkurs Informatik WiSe 17/18 Java Ausdrücke und Variablen Dr. Werner Struckmann / Stephan Mielke, Nicole Naczk, 05.10.2017 Technische Universität Braunschweig, IPS Überblick Ausdrücke, Datentypen und Variablen Kontrollstrukturen 05.10.2017

Mehr

Übung 1: Object Inspector

Übung 1: Object Inspector Übung 1: Object Inspector Es ist ein System zu entwickeln, mit dem man Objektstrukturen bezüglich ihrer Properties analysieren und dann in einem Tree Viewer (JTree) anzeigen und bearbeiten kann. Properties

Mehr

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung Warum Objektorientierung Daten und Funktionen möglichst eng koppeln und nach außen kapseln Komplexität der Software besser modellieren

Mehr

EINFÜHRUNG IN DIE PROGRAMMIERUNG

EINFÜHRUNG IN DIE PROGRAMMIERUNG EINFÜHRUNG IN DIE PROGRAMMIERUNG OBJEKTORIENTIERTES PROGRAMMIEREN Tobias Witt 25.03.2014 09:00-10:30 Täglich Übungen zur Vertiefung Laptop hier nicht erforderlich Linux, OS X Freitag: http://hhu-fscs.de/linux-install-party/

Mehr

Objektorientierte PL/SQL-Entwicklung Ein Erfahrungsbericht aus Sicht von JAVA-Entwicklern

Objektorientierte PL/SQL-Entwicklung Ein Erfahrungsbericht aus Sicht von JAVA-Entwicklern Thema Objektorientierte PL/SQL-Entwicklung Ein Erfahrungsbericht aus Sicht von JAVA-Entwicklern Referent: Frank Sanders Seite 1 Inhalt Der Vortrag hat einen sehr kurzen Einleitungsteil der sich mit Objektorientierung

Mehr

II.4.2 Abstrakte Klassen und Interfaces - 1 -

II.4.2 Abstrakte Klassen und Interfaces - 1 - 1. Unterklassen und Vererbung 2. Abstrakte Klassen und Interfaces 3. Modularität und Pakete 4. Ausnahmen (Exceptions) 5. Generische Datentypen 6. Collections II.4.2 Abstrakte Klassen und Interfaces - 1

Mehr

Enterprise JavaBeans Überblick: 8. Test-Driven Development. 8.1 Einleitung 8.2 Beispiel 8.3 Anwendung mit Eclipse und dem JBoss Application Server

Enterprise JavaBeans Überblick: 8. Test-Driven Development. 8.1 Einleitung 8.2 Beispiel 8.3 Anwendung mit Eclipse und dem JBoss Application Server Enterprise JavaBeans Überblick 1. Überblick Komponententechnologien 2. Einführung 3. Enterprise JavaBeans Architektur 4. Ressourcen Management und Primäre Services 5. Java Persistence: Entity Manager 6.

Mehr

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download Organisatorisches Folien (u.a.) gibt's auf der Lva-Homepage zum Download Diesen Mi erstes Tutorium (15-17) Ab nächster Woche montags 10-12 (jeweils im Computerraum) 17.10.2017 IT I - VO 3 1 Organisatorisches

Mehr

Johannes Unterstein - TINF16 - Java - Sommersemester 2017 JAVA. Weiterführende Spracheigenschaften

Johannes Unterstein - TINF16 - Java - Sommersemester 2017 JAVA. Weiterführende Spracheigenschaften JAVA Weiterführende Spracheigenschaften 100 AGENDA Strings Exceptions Enums Generics Lambdas & Methods Bulk-Operations 101 DIE KLASSE STRING Zeichenketten werden in Java als String repräsentiert Wie der

Mehr

Persistenz. Ralf Gitzel

Persistenz. Ralf Gitzel Persistenz Ralf Gitzel ralf_gitzel@hotmail.de 1 Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht Grundkonzepte Entity Beans Meine erste Entity Entity-Manager Lernziele Übungsaufgabe 3 Grundkonzepte

Mehr

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Kapitel 1 Der vierte Tag 1.1 Vererbung Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Sprachen. Unter Vererbung versteht man die Möglichkeit, Eigenschaften vorhandener

Mehr

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung Studiengang Medieninformatik Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 5 12.04.2017 Was bisher geschah... Objektorientierte Programmierung Klassen und Objekte, Attribute

Mehr

Programmieren in Java -Eingangstest-

Programmieren in Java -Eingangstest- Programmieren in Java -Eingangstest- Nummer: 1. Studiengang: Informatik B.Sc. Informatik M.Sc. ESE B.Sc. ESE M.Sc. Sonstiges: Fachsemester: Bitte Fragen, die Sie nicht beantworten können unbedingt mit

Mehr

EJB 3.0 alles wird einfacher. Stephan Metzler, eurolink SWITZERLAND

EJB 3.0 alles wird einfacher. Stephan Metzler, eurolink SWITZERLAND Endlich ein POJO EJB 3.0 alles wird einfacher Referent:, eurolink SWITZERLAND Java EE 5 Über mich IT Consulting FH-Dozent Schwerpunkt J2EE / EJB Autor diverser Schulungsunterlagen Firmenschulungen Fachvorträge

Mehr

Propädeutikum Programmierung in der Bioinformatik

Propädeutikum Programmierung in der Bioinformatik Propädeutikum Programmierung in der Bioinformatik Java Klassen und Objekte Thomas Mauermeier 27.11.2018 Ludwig-Maximilians-Universität München Rückblick Imperative Programmierung Variablen Fallunterscheidungen

Mehr

Vorkurs Informatik WiSe 16/17

Vorkurs Informatik WiSe 16/17 Java Ausdrücke und Variablen Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 05.10.2016 Technische Universität Braunschweig, IPS Überblick Ausdrücke, Datentypen und Variablen Kontrollstrukturen 05.10.2016

Mehr

Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 11. Dez M. Endres, A. Huhn, T. Preisinger Lösungsblatt 7

Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 11. Dez M. Endres, A. Huhn, T. Preisinger Lösungsblatt 7 Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 11. Dez. 2006 M. Endres, A. Huhn, T. Preisinger Lösungsblatt 7 Aufgabe 2 + 3: Datenbanksysteme I import java.sql.*; import oracle.jdbc.driver.*;

Mehr

SQL. SQL: Structured Query Language. Früherer Name: SEQUEL. Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99

SQL. SQL: Structured Query Language. Früherer Name: SEQUEL. Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99 SQL Früherer Name: SEQUEL SQL: Structured Query Language Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99 SQL ist eine deklarative Anfragesprache Teile von SQL Vier große Teile:

Mehr

Datenbanken im WI-Unterricht mit

Datenbanken im WI-Unterricht mit Datenbanken im WI-Unterricht mit Inhaltsverzeichnis 1 ER-Modell - Entity Relationship Modell 1 1.1 Entitäten................................................. 2 1.2 Relationen................................................

Mehr