hibernate - 如何在 Hibernate 中禁用某些实体的模式验证?

标签 hibernate validation

如何在 Hibernate 中禁用架构验证对于某些实体(不是全部)?我的一些实体正在使用 SQL,这会导致验证失败,因此我想禁用它们的验证。

最佳答案

这是一个很老的问题,但我认为这可能会有所帮助。

可以通过提供指定org.hibernate.tool.schema.spi.SchemaFilter的自定义org.hibernate.tool.schema.spi.SchemaFilterProvider来过滤验证由验证操作使用。要使用自定义提供程序(如 @tomerz 提到的),必须使用类名称设置属性 hibernate.hbm2ddl.schema_filter_provider 。例如,如果在 persistence.xml 添加

中使用 Hibernate 作为 JPA 提供程序
<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/

相关文章:

hibernate - 带有 Java 8 Stream NonUniqueResultException 的 Spring DATA JPA

java - ActionError 消息未显示在 UI 中

python - 在 tkinter 中交互验证 Entry 小部件内容(第 2 部分 - 更改条目对象的属性)

html - 将空的非必填输入字段设为无效

php - Yii2 : Either one field is required Validation

java - Hibernate 通过 Spring 注入(inject)使用查询

java - Spring 与 Hibernate JPA - EntityManager 已关闭异常

java - JPA/EntityManager有没有提供类似于Spring的RowMapper的机制

java - 传递 Spring 数据 JPA 和 hibernate 分离实体以保持多对多关系

jquery - NI 编号验证 Jquery