Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Referent: Email: Stephan Metzler [email protected] Java EE 5 Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Über mich … IT Consulting FH-Dozent Schwerpunkt J2EE / EJB / JPA Autor diverser Schulungsunterlagen Firmenschulungen Fachvorträge pers. Fokus : Middle-Tier-Architekturen und O/R-Mapping für verteilte Softwaresysteme Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Agenda Motivation – JSR 220 OOA Thematik – Annotations, Generics Begriffe eines O/R Mapping Frameworks Hibernate als O/R Mapping Framework Anwendungsbeispiel – Library Architektur von Hibernate Lebenszyklus anhand des Objektzustand Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Agenda Motivation – JSR 220 OOA Thematik – Annotations, Generics Begriffe eines O/R Mapping Frameworks Hibernate als O/R Mapping Framework Anwendungsbeispiel – Library Architektur von Hibernate Lebenszyklus anhand des Objektzustand Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Agenda Motivation – JSR 220 OOA Thematik – Annotations, Generics Begriffe eines O/R Mapping Frameworks Hibernate als O/R Mapping Framework Anwendungsbeispiel – Library Architektur von Hibernate Lebenszyklus anhand des Objektzustand Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Agenda Motivation – JSR 220 OOA Thematik – Annotations, Generics Begriffe eines O/R Mapping Frameworks Hibernate als O/R Mapping Framework Anwendungsbeispiel – Library Architektur von Hibernate Lebenszyklus anhand des Objektzustand Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Agenda Motivation – JSR 220 OOA Thematik – Annotations, Generics Begriffe eines O/R Mapping Frameworks Hibernate als O/R Mapping Framework Anwendungsbeispiel – Library Architektur von Hibernate Lebenszyklus anhand des Objektzustand Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Agenda Motivation – JSR 220 OOA Thematik – Annotations, Generics Begriffe eines O/R Mapping Frameworks Hibernate als O/R Mapping Framework Anwendungsbeispiel – Library Architektur von Hibernate Lebenszyklus anhand des Objektzustand Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Agenda Motivation – JSR 220 OOA Thematik – Annotations, Generics Begriffe eines O/R Mapping Frameworks Hibernate als O/R Mapping Framework Anwendungsbeispiel – Library Architektur von Hibernate Lebenszyklus anhand des Objektzustand Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Agenda Beziehungen – O vs R Collections Hibernate Session und Transaktionen Datenbankabfragen Hibernate Types Fetching und Caching Best Practice Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Agenda Beziehungen – O vs R Collections Hibernate Session und Transaktionen Datenbankabfragen Hibernate Types Fetching und Caching Best Practice Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Agenda Beziehungen – O vs R Collections Hibernate Session und Transaktionen Datenbankabfragen Hibernate Types Fetching und Caching Best Practice Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Agenda Beziehungen – O vs R Collections Hibernate Session und Transaktionen Datenbankabfragen Hibernate Types Fetching und Caching Best Practice Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Agenda Beziehungen – O vs R Collections Hibernate Session und Transaktionen Datenbankabfragen Hibernate Types Fetching und Caching Best Practice Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Agenda Beziehungen – O vs R Collections Hibernate Session und Transaktionen Datenbankabfragen Hibernate Types Fetching und Caching Best Practice Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Agenda Beziehungen – O vs R Collections Hibernate Session und Transaktionen Datenbankabfragen Hibernate Types Fetching und Caching Best Practice Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Buchempfehlung Java Persistence with Hibernate Second Edition of Hibernate in Action Christian Bauer and Gavin King November, 2006 | 880 pages ISBN: 1-932394-88-5 Softbound print book PDF ebook Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Best Practice Feingranulare Klassenarchitektur als eingebettete Objekte (Embeddable Klassen). Address (street, city, etc) kapseln Widerverwendbarkeit Vereinfacht Refactoring Comp Company - name: String - address: Address Address - street: String - city: String NAME: VARCHAR STREET: VARCHAR CITY: VARCHAR Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Best Practice Persistente Klassen mit Identifikation deklarieren Synthetic Keys (ohne Geschäftsrelevanz) non-Primitive Type (java.lang.Long oder java.lang.String) @Id @GeneratedValue public Long getId() { return this.id; } Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Best Practice Eigene Datei für jedes XML Mapping Keine monolithische Mapping Dateien Vereinfacht Teamumfeld <hibernate-mapping package="library"> <class name="User" table="T_USER"> <id name="id"> <generator class="native"/> </id> <property name="firstname„ column="FIRSTNAME" length="32"/> Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Best Practice XML Mapping als Ressourcen laden Mapping Dateien zusammen mit POJOs deployen Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Best Practice SQL Strings aus Applikation auslagern Non ANSI Standard SQL Praxiserfarung unterstützt Portierbarkeit SELECT … <pojo> Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Best Practice JDBC Hibernate überlassen benutzerdefinierte JDBC Connection als letzter Ausweg Eigene Implementation als net.sf.hibernate.connection.ConnectionProvider JDBC Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Best Practice Benutzerdefinierte Typen definieren Java Typ soll persistiert werden (Auslagerung in Komponente ist nicht sinnvoll!) Implementierung eines net.sf.hibernate.UserType trennt Applikation und (Hibernate) Typen Transformation UserType <pojo> Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Best Practice Direkte JDBC nur im Flaschenhals BULK-SQL können als direkte JDBC schneller sein mit Benchmark beweisen! (Hibernate)-Session bietet Transaktions-Strategy <pojo> Hibernate JDBC Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Best Practice Session Flushing Synchronisation mit der Datenbank beeinträchtigt Performanz (Transktionsende / Querys / Session.flush()) automatisches Session Flushing ausschalten Reihenfolge der Abfragen Reihenfolge von Operationen in Transaktionen <pojo> Session.flush() Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Best Practice bei Multi-Tier-Architektur saveOrUpdate() verwenden Session über Tiers transferieren für jeden Service Request eigene Session verwenden mit Session.saveOrUpdate() den persistenten Zustand eines Objektes aktualisieren CLIENT WEB LOGIC Hibernate.Session EIS Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Best Practice eigene Session pro Use Case kurze Datenbank Transaktion erhöht Skalierbarkeit Detached Objects verwenden Session schliessen Session Session Session Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Best Practice Hibernate Exceptions nicht "beheben" Transaktion zurückführen (Rollback) Session schliessen find() anstelle von load() <pojo> TRANSACTION EXEPTION ROLLBACK Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Best Practice Thread Local Session Pattern Session durch Request assoziert request response Servlet Session JSP POJO Filter Session.close() Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Best Practice Business Logik von Hibernate abstahieren Hibernate relevater Code in Interface auslagern Thread Local Session Pattern DAO in Kombination Hibernate User Types Benutzerdefinierte JDBC BusinessObject uses DataAccessbject encapsulates Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Best Practice Equals() und hashCode() überschreiben Objektvergleich ausserhalb Session problematisch nie PK der Datenbank verwenden @Override stattessen BK (Business Key) verwenden public boolean equals(Object obj) { if (this == obj) return true; if (!(obj instanceof User)) return false; final User user = (User) obj; return !(email != null ? !email.equals(user.email): user.email != null); } Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Best Practice keine exotischen Beziehungen verwenden gute Use Cases definieren selten N:M Beziehungen oft zusätzliche Informationen in der Link Tabelle erwünscht zwei 1:N Beziehungen mit zusätzlicher Link Tabelle ID ID Name 1 1 2 ID_Name ID_Projekt 1 1 2 1 Start 2 Projekt Stephan Metzler IT Consulter Java Hibernate Framework und Persistence API Lern-Ziel