DatabaseChangeLogオブジェクトをプログラムで変更しました。 JavaからのそのDatabaseChangeLogに基づいてdiffChangeLogFileファイルを生成する方法はありますか。DatabaseChangeLogからxmlファイルをプログラムで生成する方法
EDIT:ここで は
public DatabaseChangeLog removeDropColumnChangeFromDatabaseChangeLog(
DatabaseChangeLog databaseChangeLog, String oldName,
String newName, String tableName) {
DatabaseChangeLog changeLog = databaseChangeLog;
Collection<ChangeSet> changeSetsToRemove = new ArrayList<ChangeSet>();
List<ChangeSet> changeSets = changeLog.getChangeSets();
// Remove DropColumnChange from ChangeSets using tableName, oldName and
// newName
for (ChangeSet cs : changeSets) {
for (Change change : cs.getChanges()) {
if (change instanceof DropColumnChange) {
DropColumnChange aux2 = (DropColumnChange) change;
if (aux2.getTableName().equals(tableName)) {
if (aux2.getColumnName().equals(oldName)) {
changeSetsToRemove.add(cs);
}
}
}
}
}
changeSets.removeAll(changeSetsToRemove);
DatabaseChangeLog databaseChangeLogWithoutAddColumn = new DatabaseChangeLog();
for (ChangeSet cs : changeSets) {
databaseChangeLogWithoutAddColumn.addChangeSet(cs);
}
return databaseChangeLogWithoutAddColumn;
}
例であり、この方法は、入力としてDatabaseChangeLogオブジェクトを有し、テーブル名がtableNameパラメータに等しい場合、それはそれからdropColumn変更が削除されます。
DatabaseChangeLogオブジェクトのこの変更の後、DatabaseChangeLogオブジェクト(Liquibaseが更新のためにdiffの後に生成するxml)に関連するチェンジセットを含むxmlファイルを生成します。このような
何か:
databaseChange.generateXmlFile(pathToFile)。
「... DatabaseChangeLogオブジェクトの変更はプログラム的に...」ということを説明できますか?私はあなたがしたことを理解していません。 – Jens
@Jens私は上記の例を追加しました – larnouch
メインの[Liquibase](http://www.liquibase.org/javadoc/liquibase/Liquibase.html)クラスを使用して、その方法の1つを呼び出すことができます。私はJavaから直接呼び出すことによってliquibaseを使用していないし、liquibaseプラグインを書いていない。だから多分私の知識の不足のためですが、どのようにコードを実行するのですか(どのようにliquibaseを実行しますか?) – Jens