Alle Frameworks
ANJUNAR / OPEN SOURCE

Hibernate DDL Manager

Kontrollierte Schemaentwicklung auf Basis von Hibernate-Metadaten.

01

Die Idee

Ein Scala-3-Framework, das Hibernate-Mappings vor dem Start der SessionFactory mit der Datenbank vergleicht. Stabile Schema-IDs helfen, Umbenennungen zu erkennen und potenziell destruktive Änderungen ausdrücklich freizugeben.

02

Was es kann.

01

Schema-Vergleich

Änderungen aus Hibernate-Metadaten und dem aktuellen Datenbankschema ableiten.

02

Umbenennungen erkennen

Stabile IDs unterscheiden eine Umbenennung von Löschen und Neuanlegen.

03

Explizite Freigabe

Änderungen außerhalb des unterstützten Umfangs werden abgelehnt statt geraten.

03

Installation

Zum Projekt hinzufügen
libraryDependencies += "com.anjunar.hibernateddl" %% "schema-integration" % "1.0.0"

Paket: com.anjunar.hibernateddl:schema-integration

04

Direkt loslegen.

schema-integration einbinden und verwalteten Entities und Feldern stabile @SchemaId-Werte zuweisen.

Stabile IDs machen Umbenennungen erkennbar

Der Spaltenname kann sich ändern, während die Schema-ID gleich bleibt. Der Plan erkennt eine Umbenennung statt Löschen und Neuanlegen.

Quellcode
@Entity
@SchemaId("7f3a9c21")
@Table(name = "customer")
class Customer:
  @Id @SchemaId("0a1b2c3d")
  var id: java.lang.Long = uninitialized

  @SchemaId("f34e45b6")
  @Column(name = "nick_name")
  var nickName: String = uninitialized

// Rename nick_name to alias; keep its @SchemaId.
// Planned SQL: ALTER TABLE "public"."customer"
//              RENAME COLUMN "nick_name" TO "alias";

Vor dem Start prüfen

Den Plan ohne Datenbankänderung prüfen und die Migration vor der SessionFactory ausführen.

Quellcode
val metadata = MetadataSources(registry)
  .addAnnotatedClass(classOf[Customer])
  .buildMetadata()

val report = HibernateSchemaMigration.preview(
  metadata, dataSource,
  previewOptions = PreviewOptions(dataChecks = DataChecks.Existence)
)
println(PreviewRendering.text(report))

HibernateSchemaMigration.migrate(metadata, dataSource)
val sessionFactory = metadata.buildSessionFactory()
05

Bewusst gestaltet.

Die Integration läuft vor dem Aufbau der SessionFactory. Sie protokolliert die Schemahistorie und führt nur unterstützte PostgreSQL-Änderungen aus.

Dein nächster Schritt

Mach es zu deinem Werkzeug.

Sorgfältig gebaut mit Scala JS UI.Impressum