Liquibase + Hibernate переименовать колонку

Я использую базу данных H2 для хранения своих данных, и liquibase (с плагином hibernate), чтобы проверить различия между базой данных и projet.

Предположим, у меня есть следующий код:

@Entity
public class myEntity{

    @Column(name="val")
    private int value;

}

База данных на месте и уже хранит некоторые данные.

Теперь, когда я переименую вышеприведенный столбец, т. Е. Из val в value, я запускаю liquibase: diff, difflog говорит, что нужно убрать столбец "val" и добавить столбец "value".

Очевидно, что это не то, что я хотел, потому что все данные, изначально сохраненные в столбце "val", исчезли бы.

Есть ли способ сказать liquibase, что это не новая колонка, а старая переименованная?

Я хочу запустить liquibase: diff, и сгенерированный diffLog должен автоматически содержать тег rename... для моей колонки, а не add.. и drop.. one..

2 ответа

Вы пытались использовать набор изменений следующим образом (или я неправильно понял вопрос)

   <changeSet author="liquibase-docs" id="renameColumn-example">
        <renameColumn columnDataType="int"
                newColumnName="value"
                oldColumnName="val"
                remarks="A change in names"
                schemaName="public"
                tableName="myEntity"/>
    </changeSet>

В настоящее время вообще нет никакого способа, чтобы diff мог обнаружить, что изменение столбца было переименованием, а не удалением и созданием. Это верно для любой системы, которая создает изменения, используя diff, а не только Liquibase.

Представьте себя жидкой базой - вам дают две таблицы в состояниях, которые вы описываете. Как бы вы определили, что столбец был переименован, а один столбец удален, а другой столбец создан? Единственное, о чем я могу думать, это то, что нужно было бы взглянуть на содержимое столбцов и увидеть, что они "в основном одинаковые". В данном конкретном случае это невозможно, поскольку сравниваемые базы данных включают в себя базу данных, заполненную данными, а вторую - просто пустую базу данных в памяти, созданную Hibernate.

Другие вопросы по тегам