H2 - SchemaExport - Неудачный ALTER TABLE - Ограничение уже существует

При выполнении тестов jUnit, использующих базу данных H2 в памяти, хотя тест прошел успешно, в журналах я получаю следующую ошибку для разных таблиц и ссылок на ограничения, но не для всей моей структуры модели:

Unsuccessful: alter table testschema.alert_notes add constraint FK_nuif6det94kaix6xy2tc2lmt8 foreign key (created_by) references testschema.user
Constraint "FK_nuif6det94kaix6xy2tc2lmt8" already exists; SQL statement:
alter table testschema.alert_notes add constraint FK_nuif6det94kaix6xy2tc2lmt8 foreign key (created_by) references testschema.user [90045-195]

Хотя ошибка выглядит само собой разумеющейся, я не могу найти основную причину этой проблемы. Можете ли вы указать мне правильное направление?

Вы можете найти необходимые фрагменты кода ниже.

В моем data-config-test.xml У меня есть следующие бобы:

<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
    <property name="driverClassName" value="${datasource.driverClass}"/>
    <property name="jdbcUrl" value="${datasource.url}"/>
    <property name="idleTimeout" value="${datasource.hikari.idleTimeout}"/>
    <property name="maximumPoolSize" value="${datasource.hikari.maxPoolSize}"/>
    <property name="minimumIdle" value="${datasource.hikari.minIdleConnections}"/>
    <property name="poolName" value="${datasource.hikari.poolName}"/>
    <property name="dataSourceProperties">
        <props>
            <prop key="cachePrepStmts">${datasource.hikari.datasource.cachePrepStmts}</prop>
            <prop key="prepStmtCacheSize">${datasource.hikari.datasource.prepStmtCacheSize}</prop>
            <prop key="prepStmtCacheSqlLimit">${datasource.hikari.datasource.prepStmtCacheSqlLimit}</prop>
            <prop key="useServerPrepStmts">${datasource.hikari.datasource.useServerPrepStmts}</prop>
        </props>
    </property>
</bean>

а также

<bean id="hibernateProperties"
      class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="properties">
        <props>
            <prop key="hibernate.hbm2ddl.import_files_sql_extractor">${datasource.hibernate.hbm2ddl.import_files_sql_extractor}</prop>
            <prop key="hibernate.default_schema">${datasource.default_schema_name}</prop>
            <prop key="hibernate.hbm2ddl.auto">${datasource.hibernate.hbm2ddl.auto}</prop>
            <prop key="hibernate.dialect">${datasource.hibernate.dialect}</prop>
            <prop key="hibernate.show_sql">${datasource.hibernate.showSql}</prop>
            <prop key="hibernate.cache.use_second_level_cache">${datasource.hibernate.useSecondLevelCache}</prop>
            <prop key="hibernate.cache.provider_class">${datasource.hibernate.cacheProvider}</prop>
            <prop key="hibernate.generate_statistics">${datasource.hibernate.generate_statistics}</prop>
        </props>
    </property>
</bean>  

мой datasource.properties файл:

datasource.driverClass=org.h2.Driver
datasource.url=jdbc:h2:mem:testschema;MODE=MYSQL;INIT=CREATE SCHEMA IF NOT EXISTS testschema;DATABASE_TO_UPPER=false;DB_CLOSE_ON_EXIT=FALSE
datasource.username=sa
datasource.default_schema_name=testschema

datasource.hibernate.hbm2ddl.import_files_sql_extractor=org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor
datasource.hibernate.hbm2ddl.auto=create-drop
datasource.hibernate.showSql=false
datasource.hibernate.dialect=org.hibernate.dialect.H2Dialect
datasource.hibernate.useSecondLevelCache=true
datasource.hibernate.cacheProvider=org.hibernate.cache.EhCacheProvider
datasource.hibernate.generate_statistics=false

datasource.hikari.maxPoolSize=200
datasource.hikari.minIdleConnections=1
datasource.hikari.idleTimeout=600000
datasource.hikari.poolName=Hikari Connection Pool
datasource.hikari.datasource.cachePrepStmts=false
datasource.hikari.datasource.prepStmtCacheSize=250
datasource.hikari.datasource.prepStmtCacheSqlLimit=2048
datasource.hikari.datasource.useServerPrepStmts=false

Мой модельный класс (соответствующая часть):

@Entity
@Table(name = "alert_notes")
public class AlertNotes implements Serializable {

  private static final long serialVersionUID = 1L;

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @Column(name = "id")
  private Long id;

  @ManyToOne(fetch = FetchType.EAGER)
  @JoinColumn(name = "created_by")
  private UserView createdBy;

  public Long getId() {
    return id;
  }

  public void setId(Long id) {
    this.id = id;
  }

  public UserView getCreatedBy() {
    return createdBy;
  }

  public void setCreatedBy(UserView createdBy) {
    this.createdBy = createdBy;
  }

}

Д.Ф.

0 ответов

Другие вопросы по тегам