Довольно старый вопрос, но я подумал, что это может помочь.
Проверка может быть отфильтрована путем предоставления пользовательского org.hibernate.tool.schema.spi.SchemaFilterProvider
, который задает org.hibernate.tool.schema.spi.SchemaFilter
, который будет использоваться операциями проверки.Чтобы использовать пользовательский провайдер (как упомянуто @tomerz), свойство hibernate.hbm2ddl.schema_filter_provider
должно быть установлено с именем класса.Например, при использовании Hibernate в качестве поставщика JPA в persistence.xml
add
<property name="hibernate.hbm2ddl.schema_filter_provider" value="com.my.package.MySchemaFilterProvider"/>.
Это также может быть установлено программно (см. Программная конфигурация Hibernate )
Поставщик:
package com.my.package;
import org.hibernate.tool.schema.internal.DefaultSchemaFilter;
import org.hibernate.tool.schema.spi.SchemaFilter;
import org.hibernate.tool.schema.spi.SchemaFilterProvider;
public class MySchemaFilterProvider implements SchemaFilterProvider {
@Override
public SchemaFilter getCreateFilter() {
return DefaultSchemaFilter.INSTANCE;
}
@Override
public SchemaFilter getDropFilter() {
return DefaultSchemaFilter.INSTANCE;
}
@Override
public SchemaFilter getMigrateFilter() {
return DefaultSchemaFilter.INSTANCE;
}
@Override
public SchemaFilter getValidateFilter() {
return MySchemaFilter.INSTANCE;
}
}
Пользовательский фильтр:
public class MySchemaFilter implements SchemaFilter {
public static final MySchemaFilter INSTANCE = new MySchemaFilter();
@Override
public boolean includeNamespace(Namespace namespace) {
return true;
}
@Override
public boolean includeTable(Table table) {
return !table.getName().contains("the name of the entity to exclude");
}
@Override
public boolean includeSequence(Sequence sequence) {
return true;
}
}
При этом DefaultSchemaFilter
используется для всех операций в схеме базы данных, за исключением проверки сущностей.Операции проверки будут отфильтрованы по MySchemaFilter
.