Как отключить проверку схемы в Hibernate для определенных объектов? - PullRequest
4 голосов
/ 02 июня 2011

Как отключить проверку схемы в Hibernate для определенных объектов (не для всех)? Некоторые из моих сущностей используют SQL, что приводит к сбою проверки, поэтому я хочу отключить проверку для них.

Ответы [ 2 ]

2 голосов
/ 08 августа 2018

Довольно старый вопрос, но я подумал, что это может помочь.

Проверка может быть отфильтрована путем предоставления пользовательского 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.

1 голос
/ 19 ноября 2017

не уверен, какую версию hibernate вы используете, но это можно сделать с помощью свойства hibernate.hbm2ddl.schema_filter_provider

Конфигурация Hibernate

Используется для указания org.hibernate.tool.schema.spi.SchemaFilterProvider, который будет использоваться операциями создания, удаления, переноса и проверки в схеме базы данных. SchemaFilterProvider предоставляет фильтры, которые можно использовать для ограничения объема этих операций конкретными пространствами имен, таблицами и последовательностями. Все объекты включены по умолчанию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...