如何在 Hibernate 中禁用架构验证对于某些实体(不是全部)?我的一些实体正在使用 SQL,这会导致验证失败,因此我想禁用它们的验证。
最佳答案
这是一个很老的问题,但我认为这可能会有所帮助。
可以通过提供指定org.hibernate.tool.schema.spi.SchemaFilter
的自定义org.hibernate.tool.schema.spi.SchemaFilterProvider
来过滤验证由验证操作使用。要使用自定义提供程序(如 @tomerz 提到的),必须使用类名称设置属性 hibernate.hbm2ddl.schema_filter_provider 。例如,如果在 persistence.xml
添加
<property name="hibernate.hbm2ddl.schema_filter_provider" value="com.my.package.MySchemaFilterProvider"/>.
它也可以通过编程方式设置(请参阅 Hibernate Programmatic Configuration )
提供者:
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
进行过滤。
关于hibernate - 如何在 Hibernate 中禁用某些实体的模式验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6212144/