Zum Inhalt springen
Anjunar/ DOCS

Session-Lebenszyklus

Refresh, optimistische Konflikte, Tenant-Isolation und Löschen im Runtime handhaben.

Zustand

Bewusst neu laden

refresh lädt sprachabhängige Felder und ihre Zeilenversion neu. Refresh mit ungeflushten Änderungen an Übersetzungszeilen wird abgelehnt; clear und evict verwerfen die zugehörigen Snapshots.

Sauberen Zustand neu laden

Lade und aktualisiere innerhalb einer Transaktion. Führe dies aus, bevor du ungespeicherte Editoränderungen in derselben Session erzeugst.

scala
val page = session.find(classOf[Page], pageId) session.refresh(page)
Optimistische Konflikte

Gleichzeitige Schreibzugriffe auf dieselbe Sprachzeile lehnen den veralteten Commit ab, auch zwischen Editor und Domänenfeldern. Unterschiedliche Sprachzeilen können unabhängig bearbeitet werden.

Tenant

Tenant und Sprache gemeinsam festlegen

Eine Hauptentity in einer gemeinsamen Tabelle mit String-@TenantId verwendet den tenantbezogenen Session-Aufruf. Laden, HQL und Editorzugriff bleiben innerhalb dieses Session-Tenants.

Eine tenantgebundene Session

Die generierte Übersetzungszeile trägt den Tenant und einen kaskadierenden Verweis auf ID und Tenant-Schlüssel der Hauptentity.

scala
val session = HibernateI18n.openSession(factory, "de", "tenant-a") try // Begin a transaction, load and edit the tenant's entities. () finally session.close()
Massenlöschung

Datenbank-Kaskaden löschen Übersetzungszeilen, aber eine HQL-Massenlöschung lässt bereits verwaltete Objekte veraltet zurück. Leere die Session nach der Massenoperation, bevor du betroffene Entities erneut lädst.