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;
}
}
Д.Ф.