|
@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 {
|