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

Ähnliche Dokumente
Hibernate. Vortragender : Nabil Janah Kursleiter : Prof. Dr. Björn Dreher Lehrveranstaltung : Komponenten-Architekturen. Nabil janah 1 Hibernate

Gregor Raschke 2008 HIBERNATE. Eine Einführung

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

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

Hibernate Das Praxisbuch für Entwickler

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

Hibernate Search. Unterstützung laufender Java Projekte. Perfect Match Rent-a-team Coaching on the project Inhouse Outsourcing

Datenmanagement in Android-Apps. 16. Mai 2013

desk.modul : WaWi- Export

Relationales Datenbankpraktikum


Übungsaufgabe Transaktion als Middleware

Internet Explorer Version 6

Java: Vererbung. Teil 3: super()

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

O/R Mapper. O/R Mapper anhand von NHibernate & Entity Framework Thomas Mentzel März 2010

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

Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny

Objektorientierte Datenbanken

Daten-Synchronisation zwischen dem ZDV-Webmailer und Outlook ( ) Zentrum für Datenverarbeitung der Universität Tübingen

SMART Newsletter Education Solutions April 2015

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

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

eurovat Magento Extension Magento - Extension Extension V1.4.2 Dokumentation Version 1.0 SNM-Portal UG (haftungsbeschränkt) & Co. KG Vorherstraße 17

Typumwandlungen bei Referenztypen

Datenzugriffskomponente mit JPA 2.1

seit Java 1.1 Bestandteil der API: packages java.sql, javax.sql

Referent: Marko Modsching. Vortrag: JPA mit Hibernate. Datum: Deutsche Software Engineering & Research GmbH

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

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

Kurzeinführung Excel2App. Version 1.0.0

SEMINAR Modifikation für die Nutzung des Community Builders

Nathan Burgener. Design by Contract. Modul SWE

Typo 3 installieren. Schritt 1: Download von Typo3

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Software Engineering Klassendiagramme Assoziationen

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Programmieren für mobile Endgeräte SS 2013/2014. Dozenten: Patrick Förster, Michael Hasseler

2. Einrichtung der ODBC-Schnittstelle aus orgamax (für 32-bit-Anwendungen)

SANDBOXIE konfigurieren

Professionelle Seminare im Bereich MS-Office

Prinzipien Objektorientierter Programmierung

Visual Basic Express Debugging

Oracle: Abstrakte Datentypen:

Pflichtenheft. CDIX-Roles. Erweiterung des CDIX Berechtigungssystems. Autor : CD Software GmbH. Copyright CD Software GmbH Version:

System-Update Addendum

Installation der Konfigurationsdateien für alle Windows-Versionen bis einschließlich Microsoft Windows 7

FileMaker Konferenz 2011 Hamburg Speed. Performance Optimierung für Ihre Lösung / Entwickler

Updatehinweise für die Version forma 5.5.5

INSTALLATIONSANLEITUNG

Software Engineering Interaktionsdiagramme

Referenzielle Integrität SQL

Studentische Lösung zum Übungsblatt Nr. 7

Softwareentwicklungspraktikum Sommersemester Feinentwurf

Upgrade-Leitfaden. Apparo Fast Edit 1 / 7

OFFLINE SYNCHRONISATION - ENIQ ACCESSMANAGEMENT PROGRAMMIER-CLIENT (ENIQ DEVICEMANAGEMENT) EINRICHTEN INSTALLATION DER SQL SERVER INSTANZ

5.2 Neue Projekte erstellen

Erstellen eines Office-COM-Add-In mit Visual Basic 2005 Express Edition

JDBC. Allgemeines ODBC. java.sql. Beispiele

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Service-Handbuch. SH_Checkup_Applets.doc. Version: 1.02 Aktualisiert: durch: RLo Seite 1 von 6

Ein neues Outlook Konto können Sie im Control Panel über den Eintrag Mail erstellen.

Schritt 1: Verwenden von Excel zum Erstellen von Verbindungen mit SQL Server-Daten

4D Server v12 64-bit Version BETA VERSION

Kurzanweisung für Google Analytics

.NET Code schützen. Projekt.NET. Version 1.0

OP-LOG

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Große Übung Praktische Informatik 1

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

HaskellDB. Datenbank-Features in Haskell Johannes Reiher

Anleitung. Update/Aktualisierung EBV Einzelplatz Homepage. und Mängelkatalog

Dokumentation. Black- und Whitelists. Absenderadressen auf eine Blacklist oder eine Whitelist setzen. Zugriff per Webbrowser

e-books aus der EBL-Datenbank

Lokale Installation von DotNetNuke 4 ohne IIS

Prodanet ProductManager WinEdition

Access Grundlagen für Anwender. Andrea Weikert 1. Ausgabe, 1. Aktualisierung, Juli inkl. zusätzlichem Übungsanhang ACC2010-UA

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

Installationshinweise und Systemvoraussetzungen

Verwendung des IDS Backup Systems unter Windows 2000

Use Cases. Use Cases

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

Lastenheft. Inhaltsverzeichnis. Gruppe: swp09-5. Projektleiterin: Anne Vogler am: 28. April Zielbestimmungen 2. 2 Produkteinsatz 2

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Interaktive Webseiten mit PHP und MySQL

Einführung in Javadoc

Upgrade-Leitfaden. Apparo Fast Edit. Wechsel von Version 2 auf Version oder Wechsel von Version auf Version 3.0.

HOWTO Update von MRG1 auf MRG2 bei gleichzeitigem Update auf Magento CE 1.4 / Magento EE 1.8

2. Die eigenen Benutzerdaten aus orgamax müssen bekannt sein

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

tentoinfinity Apps 1.0 EINFÜHRUNG

Browsereinstellungen für moneycheck24 in Explorer unter Windows

ICS-Addin. Benutzerhandbuch. Version: 1.0

Assoziation und Aggregation

KURZANLEITUNG CYBERDUCK MIT CLOUD OBJECT STORAGE

Transkript:

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 zwischen flüchtigen und nichtflüchtigen Speicher es existieren viele Persistenz-Frameworks für die unterschiedlichsten Einsatzzwecke und Speichermedien (z.b. XML, DB) 2

Hibernate - Features Open-Source Transparente Persistence (keine Interfaces, keine Ober- Klassen) Caching auch in verteilten Systemen verzögerte Ausführung INSERT und UPDATE werden erst bei Bedarf ausgeführt Datenbank wird so z.b. durch Abbruch einer Transaktion erst gar nicht belastet keine unnötigen Updates aus einer Liste werden z.b. nur geänderte Objekte wirklich in der Datenbank aktualisiert 3

Hibernate - Features 2 Zusammenfassung von Update-Statements vorausschauendes Laden möglich z.b. in Schleifen dynamisches-nachladen dynamische SQL-Abfragen (Criteria-Query) Nutzung von Java-Annotationen 4

JDO, Hibernate, javax.persistence, EJB 3.0 5

Hibernate - Download Download von www.hibernate.org Hibernate Core und Hibernate Annotations 6

Hibernate - Installation Pakete entpacken zum Classpath hinzufügen: hibernate3.jar hibernate-annotations.jar und alle benötigten Pakete aus den jeweiligen lib-ordnern (im Zweifelsfall alle) eventuell JDBC-Treiber 7

Hibernate - Konfiguration hibernate.cfg.xml im classpath <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/db_name</property> <property name="connection.username">user</property> <property name="connection.password">password</property> <property name="dialect">org.hibernate.dialect.mysql5dialect</property> <!-- Enable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.ehcacheprovider</property> <!-- Update the database schema on startup create/validate/create-drop --> <property name="hbm2ddl.auto">update</property> </session-factory> </hibernate-configuration> 8

Hibernate - Objekte SessionFactory Erzeugung teuer->möglichst einmalig in Anwendung threadsafe optionalen Second-Level Cache Cache kompilierte Mappings Session Methoden zum laden, speichern, aktualisieren, löschen und suchen von Objekten First-Level Cache Transaction Abstrahiert JDBC, JTA, CORBA Tx atomare Arbeitseinheit jede DB-Operation muss innerhalb einer Transaction erfolgen (auch lesende) 9

speicherbare Objekte - POJO Objektzustand kann gespeichert werden, wenn: 1. eine Default-Konstruktor existiert (kann private sein) 2. ein ID-Feld angegeben ist (optional) 3. keine final Klassen deklaration (optional) 4. getters/setters für Felder (optional) 10

Lebenszyklus Transient Objekt befindet sich nicht in der DB und war es auch nie Persistent Objekt befindet sich in der Datenbank gehört zu einer Session synchron mit der Datenbank hat einen Primärschlüssel Detached Objekt befindet sich in der Datenbank hat einen Primärschlüssel Benutzung außerhalb einer Session (getrennt von DB) nicht synchron mit der Datenbank kann aber synchronisiert werden lazy-loading funktioniert in diesem Zustand nicht!!! 11

Lebenszyklus 12

Beispiel 13

Hiberante Beispiel - Mapping Mapping: Hibernate-Anweisungen zum Abbilden von Java-Objekten auf die Datenbank @Entity public class Book { @Id private String title; private String description; 14

Hiberante Beispiel - Mapping 2 Ergänzung der Hibernate.cfg.xml um den Eintrag für das Mapping Im Falle der Annotationen: Klassenname <mapping class="hibernate.book" /> 15

Hiberante Beispiel - Code SessionFactory sessionfactory = new AnnotationConfiguration().configure().buildSessionFactory(); Session session = sessionfactory.opensession(); Transaction transaction = null; try { transaction = session.begintransaction(); Book book = new Book(); book.setname( Hallo ); session.persist(book); transaction.commit(); } catch (Exception e) { if (transaction!=null) {transaction.rollback();} } finally { }... session.close(); 16

Mapping 17

Basic - Mapping @Entity @Table(name="books") public class Book { @Id @GeneratedValue private int id; @Column(length=1024, nullable=false) private String title; @Type(type = "text") private String description; @Transient private boolean locked; @Temporal(TemporalType.DATE) private Date published; @Lob //wird in dieser Konfiguration nicht Lazy geladen private byte[] cover; 18

Collection - Mapping z.b. OneToMany, cascadierend, kein verzögertes laden @OneToMany(cascade=CascadeType.ALL, fetch=fetchtype.eager) private Collection<Author> author; z.b. OneToMany, Erzeugung cascadierend, verzögertes laden, geordnet nach Name des Autors @OneToMany(cascade=CascadeType.PERSIST) @OrderBy("name") private Collection<Author> author; viele weitere Konfigurationsmöglichkeiten... OneToOne, OneToMany, Bidirectional/Unidirectional 19

Vererbungs - Mapping Angabe der Vererbungsstrategie als Annotation in der Oberklasse z.b. @Inheritance(strategy = InheritanceType.JOINED) Table per concrete class (InheritanceType.TABLE_PER_CLASS) Klasse und Unterklassen jeweils in eigener Tabelle Table per class hierarchy (InheritanceType.SINGLE_TABLE - default, kann auch entfallen) Klasse und Unterklassen jeweils in einer Tabelle in zusätzlicher Spalte wird Klassenzugehörigkeit gespeichert Table per subclass (InheritanceType.JOINED) Klasse und Unterklassen jeweils in eigener Tabelle Tabelle der Unterklassen enthält nur nicht vererbte Werte 20

Vererbungs - Mapping 2 Einfaches Beispiel @Entity public class EBook extends Book { String drmkey; } @Entity public class Book { }... 21

Suche 22

Suche - HQL Suche alle Bücher mit gegebenen Titel Query query = session.createquery("from Book where title like :title"); query.setstring("title", "%"+title+"%"); List<Book> books = query.list(); Seitenaufteilung query.setfirstresult(10); query.setmaxresults(10); Suche nach Büchern und Autor Query query = session.createquery("select b from Book as b join b.authors as a where b.title like :query or a.name like :query"); query.setstring("query", "%" + querystring + "%"); 23

Suche - Criteria Query Suche nach Buchtitel mit Criteria Query Criteria criteria = session.createcriteria(book.class); criteria.add(restrictions.ilike("title", querystring, MatchMode.ANYWHERE))); criteria.setfirstresult(10); criteria.setmaxresults(10); criteria.addorder(order.asc("title")); List<Book> books = criteria.list(); 24

Suche - Lucene 25

Lucene Volltext-Indexierer AND, OR, NOT Wildcards Unscharfe Suche Suche in einzelnen Feldern 26

Lucene - Installation Download von Hibernate Search 27

Lucene - Konfiguration hibernate.cfg.xml... <property name="hibernate.search.default.directory_provider"> org.hibernate.search.store.fsdirectoryprovider </property> <property name="hibernate.search.default.indexbase"> /var/cache/index </property>... 28

Lucene - Mapping Annotationen (Indexed, DocumentId und Field) @Entity @Indexed public class Pojo { @Id @DocumentId private String name; @Field(name="description", index=index.tokenized, store=store.yes) private String description; 29

Lucene - Suche org.apache.lucene.queryparser.queryparser qp = new MultiFieldQueryParser(new {"title", "description"},new StandardAnalyzer()); org.apache.lucene.search.query lucenequery = parser.parse( "title:hibernate Or description:persistence" ); org.hibernate.query fulltextquery = fulltextsession.createfulltextquery( lucenequery ); List result = fulltextquery.list(); 30

Gut zu wissen... 31

Lazy Property fetching 1. Problem: dynamisches Nachladen einzelner Felder 2. Lösung: java.sql.blob @Basic(fetch = FetchType.LAZY) ODER @Lob erfordert Modifikation der Klassen es gibt einen ANT-Task von Hibernate für diese Aufgabe weitere Möglichkeiten z.b. @Proxy 32

Open-View-Pattern 1. Problem: Geschlossene Sessions und dynamisches nachladen, z.b. View hat keine Möglichkeit mehr Session zu schließen 2. Lösung: auf dynamisches Nachladen verzichten Hibernate.initialize(books.getAuthors) bei Webserver schließen der Session in einem ServletFilter 33

Vielen Dank 34

Quellen www.hibernate.org http://www.doag.org/pub/docs/sig/development/ 2005-11/hibernate3.pdf http://www.oio.de/m/konf/jax2005/persistenz%20mit% 20Hibernate%20-%20final.pdf http://www.andrena.de/entwicklertag/2005/downloads/ POJO-Persistenz.pdf http://www.slideshare.net/obelikan/workshop-zuhibernate-322-ga/ http://www.devarticles.com/c/a/java/managing- Transactions-with-Hibernate/ http://www.javalobby.org/java/forums/t20533.html 35