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.