微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当没有任何变化时,Liquibase 生成 dropdefault 更改集

如何解决当没有任何变化时,Liquibase 生成 dropdefault 更改集

我正在尝试使用下面的代码使用 liquibase 和 liquibase-hiberante 以编程方式生成 liquibase 变更集

    Class.forName("org.mariadb.jdbc.Driver");
    Connection connection = DriverManager.getConnection("jdbc:mariadb://localhost:3306/sample_database","root","");

    connection.getMetaData().getDriverName();
    Database database = new MariaDBDatabase();
    database.setConnection(new JdbcConnection(connection));
    final Liquibase liquibase = new Liquibase("",new ClassLoaderResourceAccessor(),database);

    Database hibernateDatabase = new HibernateSpringPackageDatabase();
    hibernateDatabase.setDefaultSchemaName("sample_database");
    hibernateDatabase.setDefaultCatalogName("sample_database");
    hibernateDatabase.setConnection(new JdbcConnection(new HibernateConnection("hibernate:spring:" + "com.example.hibernateddl" + "?dialect=" + MariaDBDialect.class.getName(),new ClassLoaderResourceAccessor())));
    ObjectChangeFilter objectChangeFilter = null;
    String diffChangeLogFile = "/tmp/abc.xml";
    File outFile = new File(diffChangeLogFile);
    //    liquibase.update(changesToApply,new Contexts(contexts),new LabelExpression(labels));

    final Liquibase liquibaseUpdate = new Liquibase(outFile.toString(),new FileSystemResourceAccessor(File.listRoots()),database);



    try {
        DiffOutputControl diffOutputControl = new DiffOutputControl(false,false,true,null);
        diffOutputControl.setobjectChangeFilter(objectChangeFilter);
        CommandLineUtils.doDifftochangeLog(outFile.toString(),hibernateDatabase,database,diffOutputControl,objectChangeFilter,StringUtil.trimToNull(null),null);


        liquibaseUpdate.update("");

    } catch (IOException | ParserConfigurationException e) {
        throw new LiquibaseException(e);
    }

我的实体看起来像这样

@Entity
public class Sample {
    @Id
    long id;
    @Column(name = "username",columnDeFinition = "varchar(15) default 'dfds'")

    String username;
    @Column(name = "password",columnDeFinition = "varchar(15) default null")
    String password;


    String oneMoreField2;

    String oneMoreField3;
}

当程序第一次运行时,变更集正确生成,如下所示

 <createTable tableName="Sample">
            <column name="id" type="BIGINT">
                <constraints nullable="false" primaryKey="true" primaryKeyName="SamplePK"/>
            </column>
            <column name="oneMoreField2" type="VARCHAR(255)"/>
            <column name="oneMoreField3" type="VARCHAR(255)"/>
            <column name="password" type="VARCHAR(15)"/>
            <column defaultValue="dfds" name="username" type="VARCHAR(15)"/>
        </createTable>
    </changeSet>

当我第二次运行同一个程序时,我希望不会生成变更集,但我的变更日志文件修改为此

<changeSet author="ArshidDar (generated)" id="1627654919339-1">
        <createTable tableName="Sample">
            <column name="id" type="BIGINT">
                <constraints nullable="false" primaryKey="true" primaryKeyName="SamplePK"/>
            </column>
            <column name="oneMoreField2" type="VARCHAR(255)"/>
            <column name="oneMoreField3" type="VARCHAR(255)"/>
            <column name="password" type="VARCHAR(15)"/>
            <column defaultValue="dfds" name="username" type="VARCHAR(15)"/>
        </createTable>
    </changeSet>
    <changeSet author="ArshidDar (generated)" id="1627655078245-1">
        <dropDefaultValue columnDataType="varchar(255)" columnName="oneMoreField2" tableName="Sample"/>
    </changeSet>
    <changeSet author="ArshidDar (generated)" id="1627655078245-2">
        <dropDefaultValue columnDataType="varchar(255)" columnName="oneMoreField3" tableName="Sample"/>
    </changeSet>
    <changeSet author="ArshidDar (generated)" id="1627655078245-3">
        <addDefaultValue columnDataType="varchar(15)" columnName="password" defaultValue="null" tableName="Sample"/>
    </changeSet>

有人可以帮忙吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。