Spring Test DBUnit и имя схемы таблицы
Можно ли задать имя схемы таблицы при использовании @DatabaseSetup
аннотация из Spring Test DBUnit? В настоящее время я использую это так:
@DatabaseSetup("user-data.xml")
public class UserMapperTest {
}
user-data.xml: (я также безуспешно пытался установить имя элемента user.system_user)
<dataset>
<system_user
...
/>
</dataset>
И здесь я создаю свою таблицу со схемой под названием user:
create table "user".system_user (...);
И это исключение, которое я получаю при запуске теста:
org.h2.jdbc.JdbcSQLException: Table "SYSTEM_USER" not found; SQL statement:
delete from SYSTEM_USER [42102-175]
3 ответа
Я использовал этот трюк. Во-первых, нам нужен компонент OracleConnection:
<bean id="oracleConnection" class="org.dbunit.ext.oracle.OracleConnection">
<constructor-arg value="#{dataSource.getConnection()}"/>
<constructor-arg value="<your_scheme_name>"/>
</bean>
Тогда вы можете использовать эту аннотацию в ваших методах
@DbUnitConfiguration(databaseConnection = "oracleConnection")
@DatabaseSetup(...)
Надеюсь, поможет.
Если вы используете spring-test-dbunit, то вам нужно создать IDatabaseConnection с определенной конфигурацией DBUnit. Следуя примеру документа, я настроил этот для себя:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
">
<bean id="dbUnitDatabaseConfig" class="com.github.springtestdbunit.bean.DatabaseConfigBean">
<property name="datatypeFactory">
<bean class="org.dbunit.ext.postgresql.PostgresqlDataTypeFactory" />
</property>
<!--property name="qualifiedTableNames" value="true" /-->
<property name="caseSensitiveTableNames" value="true" />
</bean>
<bean id="dbUnitDatabaseConnection" class="com.github.springtestdbunit.bean.DatabaseDataSourceConnectionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="databaseConfig" ref="dbUnitDatabaseConfig"/>
<property name="schema" value="sapeo"/>
</bean>
</beans>
У меня была похожая проблема. Вы не можете с аннотацией, однако вы можете указать схему в строке подключения. Вот как я решил свое дело:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver" />
<property name="url" value="jdbc:hsqldb:mem:fullywallet;MVCC=true" />
<property name="username" value="sa" />
<property name="password" value="" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan">
<list>
<value>your.package.to.be.scanned</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.default_schema">public</prop>
</props>
</property>
</bean>
В моем случае я использовал HSQLDB, но он применим и для других баз данных