Хорошо я найти способ.
Сначала я расширить класс и переопределить набор изменений некоторые методы:
public class CustomChangeSet extends ChangeSet {
/**
* @param databaseChangeLog
*/
public CustomChangeSet(DatabaseChangeLog databaseChangeLog) {
super(databaseChangeLog);
}
public CustomChangeSet(String id, String author, boolean alwaysRun,
boolean runOnChange, String filePath, String contextList,
String dbmsList, DatabaseChangeLog databaseChangeLog) {
super(id, author, alwaysRun, runOnChange, filePath, contextList,
dbmsList, databaseChangeLog);
}
public CustomChangeSet(String id, String author, boolean alwaysRun,
boolean runOnChange, String filePath, String contextList,
String dbmsList, boolean runInTransaction,
DatabaseChangeLog databaseChangeLog) {
super(id, author, alwaysRun, runOnChange, filePath, contextList,
dbmsList, runInTransaction, databaseChangeLog);
}
public CustomChangeSet(String id, String author, boolean alwaysRun,
boolean runOnChange, String filePath, String contextList,
String dbmsList, ObjectQuotingStrategy quotingStrategy,
DatabaseChangeLog databaseChangeLog) {
super(id, author, alwaysRun, runOnChange, filePath, contextList,
dbmsList, quotingStrategy, databaseChangeLog);
}
public CustomChangeSet(String id, String author, boolean alwaysRun,
boolean runOnChange, String filePath, String contextList,
String dbmsList, boolean runInTransaction,
ObjectQuotingStrategy quotingStrategy,
DatabaseChangeLog databaseChangeLog) {
super(id, author, alwaysRun, runOnChange, filePath, contextList,
dbmsList, runInTransaction, quotingStrategy, databaseChangeLog);
}
/**
* {@inheritDoc}
* @see liquibase.changelog.ChangeSet#getSerializedObjectName()
*/
@Override
public String getSerializedObjectName() {
return super.getSerializedObjectName();
}
/**
* {@inheritDoc}
* @see liquibase.changelog.ChangeSet#getSerializableFields()
*/
@Override
public Set<String> getSerializableFields() {
final Set<String> tables = super.getSerializableFields();
tables.add("preconditions");
return tables;
}
/**
* {@inheritDoc}
* @see liquibase.changelog.ChangeSet#getSerializableFieldType(java.lang.String)
*/
@Override
public SerializationType getSerializableFieldType(String field) {
if ("preconditions".equals(field)){
return SerializationType.NESTED_OBJECT;
}
return super.getSerializableFieldType(field);
}
/**
* {@inheritDoc}
* @see liquibase.changelog.ChangeSet#getSerializedObjectNamespace()
*/
@Override
public String getSerializedObjectNamespace() {
return super.getSerializedObjectNamespace();
}
/**
* {@inheritDoc}
* @see liquibase.changelog.ChangeSet#getSerializableFieldNamespace(java.lang.String)
*/
@Override
public String getSerializableFieldNamespace(String field) {
return super.getSerializableFieldNamespace(field);
}
/**
* {@inheritDoc}
* @see liquibase.changelog.ChangeSet#getSerializableFieldValue(java.lang.String)
*/
@Override
public Object getSerializableFieldValue(String field) {
if (field.equals("preconditions")){
if (getPreconditions() != null){
return new PreconditionContainerChange(getPreconditions());
}else{
return null;
}
}
return super.getSerializableFieldValue(field);
}
После того как я создать класс, которые реализуют LiquibaseSerialization и делегирует все метод для PreconditionContainer:
public class PreconditionContainerChange implements LiquibaseSerializable {
/**
* The precondition
*/
private PreconditionContainer preconditions;
/**
* @param preconditions
*/
public PreconditionContainerChange(PreconditionContainer preconditions) {
super();
this.preconditions = preconditions;
}
/**
* {@inheritDoc}
* @see liquibase.serializer.LiquibaseSerializable#getSerializedObjectName()
*/
@Override
public String getSerializedObjectName() {
return "preConditions";
}
/**
* {@inheritDoc}
* @see liquibase.serializer.LiquibaseSerializable#getSerializableFields()
*/
@Override
public Set<String> getSerializableFields() {
return preconditions.getSerializableFields();
}
/**
* {@inheritDoc}
* @see liquibase.serializer.LiquibaseSerializable#getSerializableFieldValue(java.lang.String)
*/
@Override
public Object getSerializableFieldValue(String field) {
return preconditions.getSerializableFieldValue(field);
}
/**
* {@inheritDoc}
* @see liquibase.serializer.LiquibaseSerializable#getSerializableFieldType(java.lang.String)
*/
@Override
public SerializationType getSerializableFieldType(String field) {
return preconditions.getSerializableFieldType(field);
}
/**
* {@inheritDoc}
* @see liquibase.serializer.LiquibaseSerializable#getSerializableFieldNamespace(java.lang.String)
*/
@Override
public String getSerializableFieldNamespace(String field) {
return preconditions.getSerializableFieldNamespace(field);
}
/**
* {@inheritDoc}
* @see liquibase.serializer.LiquibaseSerializable#getSerializedObjectNamespace()
*/
@Override
public String getSerializedObjectNamespace() {
return preconditions.getName();
}
/**
* {@inheritDoc}
* @see liquibase.serializer.LiquibaseSerializable#load(liquibase.parser.core.ParsedNode, liquibase.resource.ResourceAccessor)
*/
@Override
public void load(ParsedNode parsedNode, ResourceAccessor resourceAccessor)
throws ParsedNodeException {
preconditions.load(parsedNode, resourceAccessor);
}
/**
* {@inheritDoc}
* @see liquibase.serializer.LiquibaseSerializable#serialize()
*/
@Override
public ParsedNode serialize() throws ParsedNodeException {
return preconditions.serialize();
}
Наслаждайтесь!