Zum Inhalt springen
Anjunar/ DOCS

Freigaben

Änderungen, die Daten löschen oder nach einem älteren Server aussehen, werden abgelehnt, bis du jede einzeln freigibst.

Warum

Eine entfernte Property ist eine gelöschte Spalte

Wer eine Entity, eine Property oder einen generierten Schlüssel entfernt, löscht Tabelle, Spalte oder Sequenz und die Daten darin. Ein Server mit älterem Modell täte dasselbe. Deshalb lehnt der Executor ab, und die Ablehnung nennt jede Freigabe, die der Plan braucht.

scala
import com.anjunar.hibernateddl.core.SchemaId import com.anjunar.hibernateddl.executor.{Approval, ExecutionOptions} ExecutionOptions(approvals = Set( Approval.Drop(SchemaId("7f3a9c21/f34e45b6")), // a column, table or sequence Approval.RenameBack(SchemaId("7f3a9c21")), // back to a name of an earlier revision Approval.Revert(3) // a target equal to revision 3 ))
Arten

Vier Freigaben

Jede Freigabe erlaubt genau eine Änderung. Dieselbe Liste kann aus einer Hibernate-Einstellung kommen, durch Kommas getrennt.

Approval.Drop(id) · drop:<id>
Tabelle, Spalte oder Sequenz mit dieser ID löschen, samt Daten.
Approval.RenameBack(id) · rename-back:<id>
Auf einen Namen einer früheren Revision zurückbenennen.
Approval.Revert(revision) · revert:<revision>
Auf ein Ziel migrieren, das dieser früheren Revision gleicht.
Approval.DropUniqueKey(signature) · drop-unique:<signature>
Einen Unique-Key löschen, während seine Spalten bleiben, sodass sie Duplikate halten dürfen. Weder drop noch revert erlauben das.
properties
hibernate.ddl_manager.approvals=drop:7f3a9c21/f34e45b6,revert:3
Verhalten

Freigaben erlauben, sie befehlen nie

Eine Freigabe, deren Änderung nicht geplant ist, wirkt nicht. Sie darf also für ein Release stehen bleiben.

Gut zu wissen
Eine gelöschte ID ist stillgelegt; sie wiederzuverwenden wird auch mit Freigabe abgelehnt.
Löschungen laufen zuletzt und ohne CASCADE.
Hängt eine View an einer gelöschten Spalte, schlägt die Migration fehl und wird zurückgerollt.
Entferne die Freigabe mit dem Release nach der Löschung.