Your SlideShare is downloading. ×
0
Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Auszug Seminarunterlagen "Hibernate 3.x"

2,273

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,273
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Hibernate-Sessions
  • 2. Themenüberblick "Hibernate-Sessions" Allgemeines über Sessions Session-Caches & Flushing Objektzustände in Hibernate Objektzustand-Modell Transitive Persistenzoperationen Hibernate-Session-Methoden Unterschied zwischen save() und persist()Präsentation "Hibernate 3.x" © Oliver P. Schell 2011 www.schellsoft.de 71
  • 3. Allgemeines über Sessions Die Hibernate-Session verwaltet alle JDBC-Ressourcen: • JDBC-Connections • Zustände aller persistenten Objekte • DB-Transaktionen • Session-Cache (1st-Level-Cache) • VM- oder Cluster-Cache (2cnd-Level-Cache) Hierzu stehen verschiedenste Methoden bereit: • Methoden zur allgemeinen Verwaltung der Session • Methoden zum Umgang mit Connections • Methoden zur Persistierung einzelner Objekte • Methoden zur Durchführung von Abfragen • Methoden zur Verwaltung des Cache Bitte allgemein beachten: • Niemals Werteobjekte explizit über die Session abspeichern!Präsentation "Hibernate 3.x" © Oliver P. Schell 2011 www.schellsoft.de 72
  • 4. Session-Caches & Flushing Der Session-Cache (1st-Level-Cache) optimiert die Schreibzugriffe: • Er observiert alle persistierten Beans • SQL-Statements werden erst beim "Flushing" in die DB geschrieben Wege in den Session-Cache: • Duch Übergabe an die Session: • s.save( event ); • Durch Laden aus der Datenbank: • event = (Event) s.load( Event.class, 17 ); Flushing = Übertragen von "dirty"-Anweisungen an die Datenbank: • Nach einem INSERT, dass einen nativen PK liefert (automatisch) • Vor Queries (automatisch) • Vor einem COMMIT (automatisch) • Bei s.flush() (programmgesteuert) Garantierte Operationssequenz beim Flushing: • 1) INSERTs in der Reihenfolge der s.save()-Aufrufe • 2) UPDATEs • 3) Collection DELETEs • 4) Collection-Element DELETEs, UPDATEs, INSERTs • 5) Alle Entity DELETEs in der Reihenfolge der s.delete()-AufrufePräsentation "Hibernate 3.x" © Oliver P. Schell 2011 www.schellsoft.de 73
  • 5. Objektzustände in Hibernate Transient = Bean wurde neu erzeugt oder in DB gelöscht: • Objekt besitzt keine Datenbank-Repräsentation • Objekt besitzt keinen gültigen Primärschlüssel • Objekt ist nicht mit Session-Cache assoziiert • Event event = new Event(); Persistent = Bean wird von Hibernate überwacht: • Objekt besitzt evtl. eine Datenbank-Repräsentation • Objekt besitzt einen (vielleicht temporären) gültigen Primärschlüssel • Objekt ist mit Session-Cache assoziiert • s.save( event ); Detached = Bean wird von Hibernate nicht überwacht: • Objekt besitzt eine Datenbank-Repräsentation • Objekt besitzt einen gültigen Primärschlüssel • Objekt ist nicht mit Session-Cache assoziiert • s.evict( event );Präsentation "Hibernate 3.x" © Oliver P. Schell 2011 www.schellsoft.de 74
  • 6. Objektzustand-ModellPräsentation "Hibernate 3.x" © Oliver P. Schell 2011 www.schellsoft.de 75
  • 7. Konsequenzen der Objektzustände Bitte beachten Sie: • Änderungen an persistenten Objekten werden erkannt und gespeichert: • s.save( event ); event.setCity( "Berlin" ); // OBJEKT IST DIRTY! s.getTransaction().commit(); • Änderungen an detachten Objekten sind für Hibernate nicht erkennbar: • s.save( event ); s.getTransaction().commit(); event.setCity( "Berlin" ); // OBJEKT IST DETACHT! • Referenziert ein persistentes Objekt ein transientes, so wird dieses persistent! • person = (Person) s.load( Person.class, 17 ); person.getEvents().add( event ); // OBJEKT IST PERSISTENT! s.getTransaction().commit(); " allerdings ist die Cascade-Einstellung für das Persistieren entscheidend! • Detachte Objekte können unvollständig sein: (lazy-loading liefert Proxy, der nur bei persistenten Beans funktioniert!) • person = (Person) s.load( Person.class, 17 ); s.close(); Hibernate.isInitialized( person.getTermine() ); // FALSE! Hibernate.initialize( person.getTermine() ); // EXCEPTION!Präsentation "Hibernate 3.x" © Oliver P. Schell 2011 www.schellsoft.de 76
  • 8. Transitive Persistenzoperationen Transitive Persistenzoperationen = rekursive Anwendung von Session-Operationen: • Persistenz-Operationen übertragen sich üblicherweise auf relationale Beans: • s.save( person ); // SPEICHERT EVTL. ALLE RELATIONALEN OBJEKTE Im Falle von Geschäftsbeziehungen: • cascade-Attribut im Mapping entscheidet! • Flags entsprechen den Session-Methoden-Namen: • <one-to-many name="personen" cascade="persist, delete, lock"> • Vorhandene Keys zur Kaskadierung der Operation (none = default!): • create, merge, save-update, delete, lock, refresh, evict, replicate, none, all • Löscht Geschäftsobjekte, wenn sie aus einer Collection entfernt wurden: (nur für one-to-many-Relationen möglich) • cascade="delete-orphan" // IST NICHT IN "ALL" ENTHALTEN! Im Falle von Wertebeziehungen: • "transitive persistence by reachability" • Änderung am Geschäftsobjekt / Werteobjekt = Neuspeichern aller Werteobjekte! • cascade-Attribut im Mapping ist wirkungslos!Präsentation "Hibernate 3.x" © Oliver P. Schell 2011 www.schellsoft.de 77
  • 9. Hibernate-Session-Methoden Allgemeine Session-Verwaltung: • Liefert Entity-Mode der Session: (z.B. RDB, Maps von Maps oder XML-Dateien) • EntityMode getEntityMode() • Öffnet eine neue Session: • Session getSession( EntityMode entityMode ) • Liefert die Session-Factory, die diese Session erzeugt hat: • SessionFactory getSessionFactory() • Löscht den Inhalt der Session: (alle geladenen Objekte werden detached) • void clear()Präsentation "Hibernate 3.x" © Oliver P. Schell 2011 www.schellsoft.de 78
  • 10. Hibernate-Session-Methoden Umgang mit Connections: • Ist die Session offen? (z.B. false nach COMMIT oder close() ) • boolean isOpen() • Ist die Session mit einer Datenbank verbunden? • boolean isConnected() • Enthält die Session Änderungen? • boolean isDirty() • Liefert die Connection der Session: • Connection connection() • Entkoppelt die Session von der Connection: • Connection disconnect() • Verbindet die Session mit einer Connection: • void reconnect() • Verbindet die Session mit der angegebenen Connection: • void reconnect( Connection connection ) • Schließt die Session und gibt die Connection wieder: • Connection close()Präsentation "Hibernate 3.x" © Oliver P. Schell 2011 www.schellsoft.de 79
  • 11. Hibernate-Session-Methoden Umgang mit einzelnen Objekten: • Liefert die ID des angegebenen Objektes: • Serializable getIdentifier( Object object ) • Enthält die Session das angegebene Objekt? • boolean contains( Object object ) • Entkoppelt das angegebene Objekt von der Session: (wird in "detached" überführt) • void evict( Object object ) • Lädt das Objekt mit der angegebenen ID: (liefert Exception im Fehlerfalle) • Object load( Class c, Serializable id, LockMode mode ) • Object load( String entityName, Serializable id, LockMode mode ) • Object load( Class theClass, Serializable id ) • Object load( String entityName, Serializable id ) • void load( Object object, Serializable id )Präsentation "Hibernate 3.x" © Oliver P. Schell 2011 www.schellsoft.de 80
  • 12. Hibernate-Session-Methoden Umgang mit einzelnen Objekten: • Speichert das Objekt erneut: (sendet INSERT, PK-Zustand ist gleichgültig!) • Serializable save( Object object ) • void save( Object object, Serializable id ) • Serializable save( String entityName, Object object ) • void save( String entityName, Object object, Serializable id ) • Speichert das angegebene Objekt: (je nach PK-Zustand wird save() oder update() gerufen) • void saveOrUpdate( Object object ) • void saveOrUpdate( String entityName, Object object ) • Persistiert den Zustand des angegebenen detachten Objektes: (flexibleres und konfigurierbares saveOrUpdate()) • void replicate( Object object, ReplicationMode rMode ) • void replicate( String entName, Object o, ReplicationMode m ) verfügbare Replication-Modi: • EXCEPTION, IGNORE, OVERWRITE, LATEST_VERSIONPräsentation "Hibernate 3.x" © Oliver P. Schell 2011 www.schellsoft.de 81
  • 13. Hibernate-Session-Methoden Umgang mit einzelnen Objekten: • Aktualisiert ein detachtes Objekt (sendet statisches UPDATE, vollständiger Abgleich aller Attribute, PK muss gültig sein, sonst wird Exception geworfen!) • void update( Object object ) • void update( Object object, Serializable id ) • void update( String entityName, Object object ) • void update( String entityName, Object object, Serializable id ) • Kopiert Inhalte eines detachten Objekts in eine persistente Instanz: (falls in der Session keine passende Instanz liegt, wird sie aus DB geladen) • Object merge( Object object ) • Object merge( String entityName, Object object ) teilweiser & dynamischer Abgleich detacht geänderter Attribute möglich: • <class dynamic-update="true"> • Persistiert ein Objekt: (der Unterschied zu save() wird im Folgenden geklärt) • void persist( Object object ) • void persist( String entityName, Object object )Präsentation "Hibernate 3.x" © Oliver P. Schell 2011 www.schellsoft.de 82
  • 14. Hibernate-Session-Methoden Umgang mit einzelnen Objekten: • Löscht das übergebene Objekt aus der DB: (Objekt muss lediglich eine gültige ID haben, der Zustand ist egal) • void delete( Object object ) • void delete( String entityName, Object object ) • Sperrt ein detachtes oder persistentes Objekt: (detachte Instanzen müssen unverändert sein) • void lock( Object object, LockMode lockMode ) • void lock( String entityName, Object object, LockMode mode ) • Aktualisiert den Objektzustand aus der Datenbank: (ohne auf den Cache zuzugreifen) • void refresh( Object object ) • void refresh( Object object, LockMode lockMode ) • Liefert den Sperrmodus für das angegebene Objekt: • LockMode getCurrentLockMode( Object object ) • Startet eine Transaktion: • Transaction beginTransaction()Präsentation "Hibernate 3.x" © Oliver P. Schell 2011 www.schellsoft.de 83
  • 15. Hibernate-Session-Methoden Umgang mit einzelnen Objekten: • Liefert das Transaction-Objekt, das mit dieser Session assoziiert ist: • Transaction getTransaction() • Liefert das Objekt mit der angegebenen ID (oder NULL im Fehlerfalle): • Object get( Class clazz, Serializable id ) • Object get( Class clazz, Serializable id, LockMode lockMode ) • Object get( String entityName, Serializable id ) • Object get( String entityName, Serializable id, LockMode mode ) • Liefert den Entity-Namen für das angegebene persistente Objekt: (Entity-Name muss in der Mapping-Datei definiert sein) • String getEntityName( Object object ) • Definiert das angegebene Objekt als Readonly-Objekt: (es findet kein Dirty-Checking statt) • void setReadOnly( Object entity, boolean readonly )Präsentation "Hibernate 3.x" © Oliver P. Schell 2011 www.schellsoft.de 84
  • 16. Hibernate-Session-Methoden Umgang mit Abfragen: • Erzeugt eine Abfrage, die alle Objekte vom angegebenen Typ liefert: • Criteria createCriteria( Class persistentClass ) • Criteria createCriteria( Class persistentClass, String alias ) • Erzeugt eine Abfrage für alle Objekte mit angegebenem Entity-Namen: • Criteria createCriteria( String entityName ) Criteria createCriteria( String entityName, String alias ) • Erzeugt eine Abfrage mit der angegebenen HQL-Abfrage: • Query createQuery( String queryString ) • Erzeugt eine Abfrage mit der angegebenen SQL-Abfrage: • SQLQuery createSQLQuery( String queryString ) • Erzeugt eine Abfrage für die angegebene persistente Collection und den angegebenen Filter (HQL): • Filter createFilter( Object collection, String queryString )Präsentation "Hibernate 3.x" © Oliver P. Schell 2011 www.schellsoft.de 85
  • 17. Hibernate-Session-Methoden Umgang mit Abfragen: • Liefert die benannte Abfrage mit dem angegebenen Namen: • Query getNamedQuery( String queryName ) • Bricht die aktuelle Abfrage (z.B. aus parallelem Thread) ab: • void cancelQuery() • Aktiviert den angegebenen Filter für diese Session: • Filter enableFilter( String filterName ) • Liefert den aktiven Filter mit dem angegebenen Namen: • Filter getEnabledFilter( String filterName ) • Deaktiviert den angegebenen Filter für diese Session: • void disableFilter( String filterName )Präsentation "Hibernate 3.x" © Oliver P. Schell 2011 www.schellsoft.de 86
  • 18. Hibernate-Session-Methoden Umgang mit dem Cache: • Schreibt die Änderungen im Cache in die Datenbank: • void flush() • Setzt den Flush-Modus: (Default-Wert ist auto = flushing vor SQL-Queries und vor Transaktionen) • void setFlushMode( FlushMode flushMode ) • Liefert den Flush-Modus: • FlushMode getFlushMode() • Setzt den Second-Level-Cache-Modus: • void setCacheMode( CacheMode cacheMode ) • Liefert den Cache-Modus: • CacheMode getCacheMode()Präsentation "Hibernate 3.x" © Oliver P. Schell 2011 www.schellsoft.de 87
  • 19. Unterschied zw. save() und persist() Die Unterschiede zw. save() und persist() sind eher akademisch! Es geht um 2 Fragen: • In welchem Zustand muss die Bean sein, um eingefügt zu werden? • Wann genau wird der PK eines eingefügten Objekts ermittelt? save(): • Speichert sowohl transiente als auch detachte Objekte • Der PK wird sofort ermittelt, evtl. auch durch ein INSERT außerhalb der Transaktionsgrenzen! persist(): • Speichert nur transiente, aber keine detachten Objekte • Hibernate garantiert: persist() erzeugt kein INSERT außerhalb der TransaktionsgrenzenPräsentation "Hibernate 3.x" © Oliver P. Schell 2011 www.schellsoft.de 88

×