12
Enterprise-IT-Praktikum Hibernate-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Enterprise-IT-Praktikum Hibernate-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Embed Size (px)

Citation preview

Page 1: Enterprise-IT-Praktikum Hibernate-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Enterprise-IT-PraktikumHibernate-Einführung

Institut für TelematikUniversität zu Lübeck

Wintersmester 2012/13Dennis BoldtDavid Gregorczyk

Page 2: Enterprise-IT-Praktikum Hibernate-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Enterprise-IT-Praktikum – Hibernate-Einführung 2

Hibernate…• Objekt/Relationale Persistenz und Abfrage• Abbildung zwischen

– Java Klassen <-> Datenbanktabellen– Java Datentypen <-> SQL Datentypen

Page 3: Enterprise-IT-Praktikum Hibernate-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Enterprise-IT-Praktikum – Hibernate-Einführung 3

Was bedeutet das?• Gängige Datenbanken verwenden als Modell

Entitäten und Relationen• Java verwendet als Modell Objekte• O/R Mapper bringt beide Welten zusammen• Stellt fertige Mechanismen bereit zur Abbildung

von der Objekt-Welt in die ER-Welt

Page 4: Enterprise-IT-Praktikum Hibernate-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Enterprise-IT-Praktikum – Hibernate-Einführung 4

Mappings konstruieren• Zwei Möglichkeiten, Java Klassen zu DB-Entitäten

zu mappen:1.XML-basiert (Dateien der Form *.hbm.xml)2.Annotations-basiert (z.B. @Entity)

Page 5: Enterprise-IT-Praktikum Hibernate-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Enterprise-IT-Praktikum – Hibernate-Einführung 5

Mappings konstruieren über XML• Erster Schritt: Klasse definieren• Zweiter Schritt: XML-Datei anlegen und

Relationen eintragenHibernate-XML-Datei:<hibernate-mapping package="de.uniluebeck.itm.eit.model"> <class name="Book" table="books"> <id name="id" column="book_id"> <generator class="native"/> </id> </class></hibernate-mapping>

Java-Klasse:class Book{ private Integer id; public getId() ... public setId(Integer id) ...}

Page 6: Enterprise-IT-Praktikum Hibernate-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Enterprise-IT-Praktikum – Hibernate-Einführung 6

Mappings konstruieren über Java-Annotationen• Erster Schritt: Klasse definieren• Zweiter Schritt: Annotationen einfügen

Annotationen:@Entity@Table(name = "books")class Book implements Serializable { @Id @GeneratedValue private Integer id; public getId() ... public setId(Integer id) ...}

Java-Klasse:class Book{ private Integer id; public getId() ... public setId(Integer id) ...}

Page 7: Enterprise-IT-Praktikum Hibernate-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Enterprise-IT-Praktikum – Hibernate-Einführung 7

Datenmodell• Einfache Java-Klassen (POJOs)• Zugriff nach Bean-Konventionen (Getter/Setter)

oder direkter Attributzugriff• Methoden und Attribute mit private & protected

möglich• Instanziierung im Applikationskern mit new• Implementierung des (parameterlosen) Default-

Konstruktors erforderlich• Hibernate unterstützt auch Collections

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/collections.html

Page 8: Enterprise-IT-Praktikum Hibernate-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Ladestrategien• Lazy

Referenzierte Entitäten werden nur nach Bedarf geladen• Eager

Referenzierte Entitäten werden beim ersten Zugriff geladen

• Ladestrategien lassen sich auf Klassen-, Relationen, oder Query-Ebene anwenden

• Ermöglicht Einstellungen zur Performance-Optimierung• Mit Vorsicht und nur sehr bewusst einzusetzen, da

durch einen Eager-Zugriff im worst-case die gesamte Datenbank ausgelesen werden könnte!

Page 9: Enterprise-IT-Praktikum Hibernate-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Lebenszyklus einer Entität: die Hibernate Session• Session stellt die Objekt-Identität sicher

– Verwendet PK, so liefert load() zur selben ID immer dieselbe Instanz

– Generierten technischen Schlüssel aber nicht für Implementierung von equals() bzw. hashCode() verwenden! (erst mit flush() werden generierte IDs zugewiesen)

• Session hat Methoden zur Transaktionssteuerung• Session hat Factory-Methoden für Queries, z.B.

createQuery, getNamedQuery

Page 10: Enterprise-IT-Praktikum Hibernate-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Lebenszyklus einer Entität: die Hibernate Session

Page 11: Enterprise-IT-Praktikum Hibernate-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Hibernate-Beispiel: Transaktionssteuerung• Zunächst SessionFactory-Objekt generieren

Verschiedene Wege, dies zu erreichen…• Über die Session-Factory können Sessions generiert

und damit wiederum Transaktionen und Persistenzzugriffe gesteuert werden:

Session s = HibernateUtil.getSessionFactory().getCurrentSession();try{ s.beginTransaction(); s.save(new Book()); s.getTransaction().commit();} catch (Exception e){ s.getTransaction().rollback();}

Page 12: Enterprise-IT-Praktikum Hibernate-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Hibernate Startpunkte• http://docs.jboss.org/hibernate/core/3.6/quickstart/

en-US/html_single/• http://docs.jboss.org/hibernate/core/3.6/reference/

en-US/html_single/• http://docs.jboss.org/hibernate/entitymanager/3.6/

reference/en/html_single/