Mapping - TekZone

tekzone.ch
  • Keine Tags gefunden...

Mapping - TekZone

Motivation• Bei den Objekten handelt es sich um POJO's(Plain Old Java Objects). Diese Objekte sindeinfacher Natur und haben Attribute undMethoden (Accessors, Mutators).• Hibernate kann mit allen relationalenDatenbanksystemen benutzt werden, für die eseinen JDBC-Treiber gibt. Anwendungsseitigkann Hibernate entweder in einer Java-Applikation benutzt werden oder in eine Servlet-Engine oder einen Applikationsserver integriertwerden.Hibernate E. MUND 2006 4


Motivation• Mit Hibernate muss kein JDBCgeschrieben werden• Mit Hibernate werden Objekt-Verknüpfungen automatisch verwaltet• Hibernate trennt die Persistenzschichtsauber von der Anwendungsschicht• Hibernate steht nicht in Konkurrenz zuStandards wie JDBC, sondern verwendetdiese im HintergrundHibernate E. MUND 2006 5


Persistenz• Automatische Persistenz -> kein Aufwand– In Hibernate wird die Persistenz der Datenautomatisch sichergestellt– Die Persistenzschicht in Java ist dafür verantwortlich,dass alle Daten mit der Datenbank synchron sind• Transparente Persistenz -> keine Aenderung– Bei transparenter Persistenz werden die zuspeichernden Java Objekte codemässig nichtverändertHibernate E. MUND 2006 6


Architektur• Session Factory Klasse– Einmalig (pro Datenbankverbindung)– Bezieht die Informationen aus demXML File (hibernate.cfg.xml) oderProperty File (hibernate.properties)• Verwendeter Treiber (JDBC)• Pfad zur Datenbank• Dialekt der Datenbank• Bestehende Mappings in der Datenbank, aufwelche aus Java zugegriffen werden kann• Weitere Details wie Cache, etc.Hibernate E. MUND 2006 8


• SessionArchitektur– Wird von der Session Factory geliefert– Mit ihr wird von der Java Anwendung aus aufdie Datenbank zugegriffen!!!!!!!– Kümmert sich um alles im Bezug auf dasStarten und das Beenden von Transaktionen(commit, rollback, etc.)– Kennt!!!! und kümmert!! sich um alles imBezug auf Objekte (speichern, löschen,ändern, etc.)Hibernate E. MUND 2006 9


Beispiel• Das folgende Beispiel beginnt mit einerJava Klasse, die einen ‚Event‘repräsentiert und geht über die HibernateMapping- und Configuration- Dateien biszum Laden und Speichern der Objekte.• Entspricht dem Beispiel in Kapitel 2 derHibernate DokumentationHibernate E. MUND 2006 10


Event.java• Die erste Klasse repräsentiert einen Event,der in die Datenbank gespeichert wird• Verwendung von Standard JavaBeanNamenskonventionen und somit getterund setter Methoden• Dies ist die empfohlene Vorgehensweise,Hibernate könnte aber auch direkt auf dieFelder zugreifenHibernate E. MUND 2006 11


Event.javapublic class Event {private Long id; // Schlüsselattribute// Preis!! für die Persistenzprivate String title;private Date date;Event() {}public Long getId() {return id;}private void setId(Long id) {this.id = id;}public Date getDate() {return date;}Hibernate E. MUND 2006 12


Event.javapublic void setDate(Date date) {this.date = date;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}}Hibernate E. MUND 2006 13


Mapping-File• Es muss Hibernate mitgeteilt werden, wiees die Objekte der persistenten Klasseladen und speichern kann• Mit dem Mapping-File wird Hibernatemitgeteilt, auf welche Tabellen in derDatenbank es zugreifen soll und welcheAttribute zu verwenden sind• Ab HIBERNATE 3 zusätzlich mit JAVA 1.5Annotations.Hibernate E. MUND 2006 14


Mapping-File[...]Hibernate E. MUND 2006 15


Mapping-FileHibernate E. MUND 2006 16


Mapping-FileHibernate E. MUND 2006 17


Mapping-FileHibernate E. MUND 2006 18


Config-Fileorg.hsqldb.jdbcDriverjdbc:hsqldb:data/tutorialsaHibernate E. MUND 2006 20


Config-File1org.hibernate.dialect.HSQLDialecttruecreateHibernate E. MUND 2006 21


EventManager• Eine kleine Anwendung (EventManager)zeigt im folgenden, wie man Objekte ausder Datenbank holt bzw. in die Datenbankspeichert. (Ausschnitt)Hibernate E. MUND 2006 22


EventManagerpublic void createAndStoreEvent(String title, DatetheDate) {Session session = HibernateUtil.getSession();Transaction tx = session.beginTransaction();Event theEvent = new Event();theEvent.setTitle(title);theEvent.setDate(theDate);session.save(theEvent);}tx.commit();HibernateUtil.closeSession();Hibernate E. MUND 2006 23


EventManagerprivate List listEvents() {Session session = HibernateUtil.getSession();Transaction tx = session.beginTransaction();List result =session.createQuery("from Event").list();tx.commit();session.close();}return result;Hibernate E. MUND 2006 24


EventManager……..List events = EventMgr.listEvents();for (int i = 0; i < events.size(); i++) {Event theEvent = (Event) events.get(i);System.out.println("Event: " +theEvent.getTitle() +" Time: " +theEvent.getDate());}}Hibernate E. MUND 2006 25


HQL• HQL ist die Abfragesprache vonHibernate und bildet ein Analogon zu SQL• Beispiel aus dem EventManager:List result =session.createQuery("from Event").list();• Beispiel aus der Hibernate Dokumentation:“from Cat cat where cat.mate.name is not null”Auf diese Art kann eine Relation direktabgefragt werdenHibernate E. MUND 2006 26


Person.java• Als nächstes geht es nun darum einezweite Tabelle zu implementieren• Die Klasse Person.java repräsentiert dieseTabelle• Parallel muss ein neues Mapping-File(Person.hbm.xml) erstellt werden und imHibernate Konfigurations-File eingetragenwerdenHibernate E. MUND 2006 27


Person.javapublic class Person {}private Long id;private int age;private String firstname;private String lastname;Person() {}// Accessor methods for all properties, private// setter for 'id'Hibernate E. MUND 2006 28


MappingHibernate E. MUND 2006 29


Config-FileHibernate E. MUND 2006 30


BeziehungEVENTSmPERSONEVENTnPERSONEVENT_IDEVENT_DATETITLEPERSON_IDAGEFIRSTNAMELASTNAMEHibernate E. MUND 2006 32


Beziehungpublic class Person {private Set events = new HashSet();public Set getEvents() {return events;}}public void setEvents(Set events) {this.events = events;}….….Hibernate E. MUND 2006 33


BeziehungHibernate E. MUND 2006 34


EventManagerprivate void addEventToPerson(Long personId,Long eventId) {Session session = HibernateUtil.getSession();Transaction tx = session.beginTransaction();Person aPerson = (Person) session.load(Person.class,personId);Event anEvent = (Event) session.load(Event.class,eventId);aPerson.getEvents().add(anEvent);}tx.commit();HibernateUtil.closeSession();Hibernate E. MUND 2006 35


Bidirektional• Mit den folgenden Ergänzungen wird einebidirektionale Assoziationen realisiert.• Wichtig ist dabei die Sicht aus Java undnicht aus SQL!!!!!• Somit muss die Bidirektionalität in Javaselber geschrieben werden!!!• Beziehungen in relationalen Datenbankensind immer bidirektional aufgrund vonSchlüssel und Fremdschlüssel!!!Hibernate E. MUND 2006 36


Bidirektionalpublic class Event {…….private Set participants = new HashSet();public Set getParticipants() {return participants;}public void setParticipants(Set participants) {this.participants = participants;}Hibernate E. MUND 2006 37


Bidirektionalpublic class Person {………protected Set getEvents() {return events;}protected void setEvents(Set events) {this.events = events;}public void addToEvent(Event event) {this.getEvents().add(event);event.getParticipants().add(this);}public void removeFromEvent(Event event) {this.getEvents().remove(event);event.getParticipants().remove(this);}Hibernate E. MUND 2006 38


BidirektionalErweiterung im XML File:……Hibernate E. MUND 2006 39


A guided TourA Guided TourA Guided TourÜber Beziehungen in Java und HipernateBeziehungstypen in HibernateHibernate E. MUND 2006


I. Vererbung in HibernateModellierungsvariantenTable per concrete class--Discard polymorphism andinheritance relationships completely from the relationalmodelTable per class hierarchy—Enable polymorphism bydenormalizing the relational model and using a typediscriminator column to hold type informationTable per subclass—Represent “is a” (inheritance)relationships as “has a” (foreign key) relationshipsHibernate E. MUND 2006


II. Relationships in HibernateRichtung von BeziehungenIn relationalen Datenbanken sind Relationen immerbidirektional (über Schlüssel und Fremdschlüssel).In Java (und somit in Hibernate) müssen dieseexplizit programmiert und konfiguriert werden.Java (und somit Hibernate) erlaubt unidirektionaleRelationen. (Obwohl diese in einer relationalenDatenbank immer bidirektional sind)Hibernate E. MUND 2006


II. Relationships in HibernateMultiplizitätNeben der Richtung muss auch die Multiplizität einer Beziehungin Java und somit in Hibernate programmiert und konfiguriertwerden.Zwischen Instanzen der Klassen A und B unterscheiden wirzwischen folgenden Typen der Multiplizität:Hibernate E. MUND 2006


III. Relationships im Ueberblick• one to one, unidirektional• one to one, bidirektional• one to many, unidirektional• many to one, unidirektional• one to many, bidirektional• many to one, bidirektional• many to many, unidirektional• many to many, bidirektionalHibernate E. MUND 2006


Entity-Objects und Value-ObjectsEntity-Objects Klassen:eigene IdentitätPrimärschlüssel in der DatenbankBeispiele: Person, Termin, Auftrag..Value-Objects Klassen:Value-Objects Klassen sind Java Klassen.Werden in der Datenbank gespeichert.Haben keine Identität, nur ihre Attributwerte spielen eine Rolle.In UML 2 sind dies Diese Werte Klassen können singulär oder auch in Collections auftreten.Beispiele: Adresse (Strasse, Nr, PLZ, ORT), EmailAdresse,Note (Fach, Notenwert),....Hibernate E. MUND 2006 45


Weiter Basiseigenschaftenvon HIBERNATE• Abbildungkonstrukte für jegliche Art von Relationships• Unterstützung von optimistischem Locking• steuerbare, transitive Persistenz (by reachability)• Klassenabhängige Fetching Strategie (immediate, lazy,eager, batch)• Unterstützung von normalen und verteilten Transaktionen(Java Transaction API)• First- und Second Level Caching• Mächtiges HQL• (Reverse) Engineering Tools•…und…. und…Hibernate E. MUND 2006


Hibernate 3.0• Hibernate 3.0 bildet den Persistenz-Kern von EJB 3.0• Begriffe sind z. T. verschieden (Session = Entity Manager)• Konfiguration by exception und Namenskonvention• Java 1.5 Annotations zusätzlich zu XML File Mapping• NHIBERNATE für .NETHibernate E. MUND 2006 47


Hibernate an der ZHW• Hibernate wir im Pflicht-Modul DBP behandelt• Entwicklung eines Eclipse basierendem Modellierungs- undCode Generierungs-Tools in Zusammenarbeit mit Kunden.• Anwendungen(Projekt- und Diplomarbeiten) mit relationalenDatenbanken immer mit HIBERNATE• Erste Messungen mit HIBERNATE Caches und NHIBERNATE.Hibernate E. MUND 2006 48


These für DiskussionJAVA + relationale Datenbanken => benutze HIBERNATEHibernate E. MUND 2006 49

Weitere Magazine dieses Users
Ähnliche Magazine