@org.hibernate.annotations.Entity

hibernate buch cover klein

Extract of the annotation reference in the Hibernate Developer Guide by example

Extensive, easy-to-follow introduction to Hibernate 3 including complete working examples. Integration of Hibernate with other technologies like Spring, EJB3, Struts and JavaServer Faces (MyFaces) is explained.

It is available as PDF in English language.
A German paper book was published by the Galileo Verlag.

Get more information.

@org.hibernate.annotations.Entity(

ist eine Erweiterung zur Annotation @javax.persistence.Entity und kann nur zus�tzlich verwendet werden; Sie erlaubt detailliert Hibernate spezifische Parameter für das Entity festzulegen.

mutable = true,

Wenn das Entity nur gelesen aber nicht ge�ndert werden kann, sollte man mutable den Wert false zuweisen.

dynamicInsert = true,

Update-Queries für Klassen werden gew�hnlich bei der Initialisierung erzeugt und aktualisieren alle Spalten der Datenbank, auch wenn sich nur ein Feld �ndert. Das ist nur in genau einer Situation ein Problem:

Wenn Sie in einer Tabelle Spalten mit kurzen Werten und Spalten mit Blobs/Clobs mischen und h�ufig die kurzen Spalten �ndern, w�rde der Update Befehl unn�tiger Weise die Blob/Clob Spalten beinhalten und die Geschwindigkeit verschlechtern.

L�sung a: Teilen Sie Ihre Tabelle auf.

L�sung b: Verwenden Sie dynamic-update

Wenn Sie dynamic-update verwenden, erzeugt Hibernate dynamisch eine Update-Query, die nur die Spalten enth�lt, welche sich auch ge�ndert haben. Es ist wichtig zu wissen, dass die Erzeugung der Query Zeit kostet, da keine existierende Query wiederverwendet werden kann. Verwenden Sie das also nicht bei �normalen� Tabellen. Weitere Hinweise finden Sie in Kapitel 17.3Dynamic-update, dynamic insert.

dynamicUpdate = true,

Das Prinzip ist das gleiche, wie bei dynamic-update. Der Unterschied ist, dass nur Spaltennamen in der Insert-Query verwendet werden, die nicht leer sind.

selectBeforeUpdate = false,

Diese Einstellung wird die Performance deutlich verschlechtern und sollte daher vermieden werden.

Wenn select-before-update verwendet wird, pr�ft Hibernate vor jedem Update mit einer Abfrage, ob sich die Daten ver�ndert haben. Ein sinnvolles Szenario w�re: Man m�chte vermeiden, dass durch ein unn�tiges Update ein Trigger auf der Datenbank aufgerufen wird.

polymorphism = PolymorphismType.IMPLICIT,

Diese Einstellung legt fest, wie sich Hibernate bei Vererbungshierarchien verh�lt.

Beispiel: class Blume extends Pflanze. Die Query hei�t �select from Pflanze

Implicit bedeutet, dass diese Abfrage, je nachdem, ob ein Datenbankeintrag eine Blume oder nur eine Pflanze ist, eine Instanz der jeweiligen Klasse zur�ckgibt.

Explicit w�rde bei dieser Abfrage, wenn es eine Instanz der Klasse Blume findet, eine Klasse Pflanze zur�ckgeben und die zus�tzlichen Felder von Blume einfach ignorieren.

persister = "customPersister",

Diese Einstellung muss �u�erst selten ge�ndert werden. Ein Persister ist verantwortlich für das Schreiben der Daten. Man k�nnte zum Beispiel einen Persister erstellen, der Daten in LDAP speichert.

Im Hibernate Download finden Sie ein Beispiel im test Verzeichnis. Suchen Sie nach der Klasse org.hibernate.test.legacy.CustomPersister.

optimisticLock = OptimisticLockType.VERSION

Legt die Strategie für optimistic locking fest. Ich empfehle die Einstellung nur, wenn es wirklich notwendig ist, zu �ndern. Eine �nderung bringt eine deutliche Performance Einbu�e.

ALL liest die Daten aus der Datenbank und pr�ft alle Spalten, ob sich diese ge�ndert haben. DIRTY liest auch die Daten aus, validiert aber nur Spalten, die sich ge�ndert haben. Damit kann man konkurrierende Updates auf dem gleichen Datensatz durchf�hren, ohne dass es zu einer Ausnahme kommt.

Mehr Informationen zu Optimistic-Locking gibt es im Kapitel 8.5.1.

)


@Entity

@org.hibernate.annotations.Entity(mutable = true, dynamicInsert = true,
dynamicUpdate = true, selectBeforeUpdate = false,
polymorphism = PolymorphismType.IMPLICIT,
persister = "customPersister",
optimisticLock = OptimisticLockType.VERSION)

public class Tiger implements Serializable {