【问题标题】:Spring Test DBUnit and table schema nameSpring Test DBUnit 和表模式名称
【发布时间】:2014-04-01 20:23:47
【问题描述】:

使用 Spring Test DBUnit 中的@DatabaseSetup 注解时是否可以设置表模式名称?目前我正在这样使用它:

@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]

【问题讨论】:

    标签: java dbunit spring-test-dbunit


    【解决方案1】:

    我使用了这个技巧。 首先,我们需要 OracleConnection bean:

    <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(...)
    

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      如果您使用的是spring-test-dbunit,那么您需要使用特定的 DBUnit 配置创建一个 IDatabaseConnection。按照文档的示例,我为我设置了这个:

      <?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>
      

      【讨论】:

      • 我需要使用 因为我的 .xml 文件中的数据符合架构。
      【解决方案3】:

      我遇到了类似的问题。您不能使用注释,但是您可以在连接字符串上指定模式。以下是我解决问题的方法:

      <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,但它也适用于其他数据库

      【讨论】:

        猜你喜欢
        • 2023-03-02
        • 2011-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-29
        • 1970-01-01
        • 2015-07-19
        • 1970-01-01
        相关资源
        最近更新 更多