yur*_*ura 10 validation hibernate
如何在Hibernate 中为某些实体(不是全部)禁用模式验证?我的一些实体正在使用导致验证失败的 SQL,所以我想禁用它们的验证。
b0g*_*usb 12
一个很老的问题,但我认为这可能会有所帮助。
可以通过提供org.hibernate.tool.schema.spi.SchemaFilterProvider
指定org.hibernate.tool.schema.spi.SchemaFilter
验证操作使用的自定义来过滤验证。要使用自定义提供程序(如@tomerz 提到的),hibernate.hbm2ddl.schema_filter_provider
必须使用类的名称设置该属性。例如,如果在persistence.xml
添加中使用 Hibernate 作为 JPA 提供程序
<property name="hibernate.hbm2ddl.schema_filter_provider" value="com.my.package.MySchemaFilterProvider"/>.
Run Code Online (Sandbox Code Playgroud)
它也可以以编程方式设置(请参阅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;
}
}
Run Code Online (Sandbox Code Playgroud)
自定义过滤器:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
通过这样做,DefaultSchemaFilter
除了实体的验证之外, 用于数据库模式上的所有操作。验证操作将被过滤MySchemaFilter
。
归档时间: |
|
查看次数: |
6559 次 |
最近记录: |