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… • Objekt/Relationale Persistenz und Abfrage • Abbildung zwischen – Java Klassen <-> Datenbanktabellen – Java Datentypen <-> SQL Datentypen Enterprise-IT-Praktikum – Hibernate-Einführung 2 Institut für Telematik | Enterprise-IT-Praktikum 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 Enterprise-IT-Praktikum – Hibernate-Einführung 3 Institut für Telematik | Enterprise-IT-Praktikum 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) Enterprise-IT-Praktikum – Hibernate-Einführung 4 Institut für Telematik | Enterprise-IT-Praktikum Mappings konstruieren über XML • Erster Schritt: Klasse definieren • Zweiter Schritt: XML-Datei anlegen und Relationen eintragen Java-Klasse: Hibernate-XML-Datei: class Book <hibernate-mapping { package="de.uniluebeck.itm.eit.model"> private Integer id; <class name="Book" table="books"> public getId() ... <id name="id" column="book_id"> public setId(Integer id) ... <generator class="native"/> } </id> </class> </hibernate-mapping> Enterprise-IT-Praktikum – Hibernate-Einführung 5 Institut für Telematik | Enterprise-IT-Praktikum Mappings konstruieren über Java-Annotationen • Erster Schritt: Klasse definieren • Zweiter Schritt: Annotationen einfügen Java-Klasse: class Book { private Integer id; public getId() ... public setId(Integer id) ... } Enterprise-IT-Praktikum – Hibernate-Einführung Annotationen: @Entity @Table(name = "books") class Book implements Serializable { @Id @GeneratedValue private Integer id; public getId() ... public setId(Integer id) ... } 6 Institut für Telematik | Enterprise-IT-Praktikum 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) DefaultKonstruktors erforderlich • Hibernate unterstützt auch Collections http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/collections.html Enterprise-IT-Praktikum – Hibernate-Einführung 7 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! 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 Institut für Telematik | Enterprise-IT-Praktikum Lebenszyklus einer Entität: die Hibernate Session 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(); } Institut für Telematik | Enterprise-IT-Praktikum Hibernate Startpunkte • http://docs.jboss.org/hibernate/core/3.6/quickstart/enUS/html_single/ • http://docs.jboss.org/hibernate/core/3.6/reference/enUS/html_single/ • http://docs.jboss.org/hibernate/entitymanager/3.6/referenc e/en/html_single/