03-Hibernate-Einfuehrung

Werbung
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/
Herunterladen