问题描述
我正在尝试使用下面的代码使用 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 (将#修改为@)