首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DBunit NoSuchTableException

DBunit NoSuchTableException
EN

Stack Overflow用户
提问于 2014-09-13 16:16:46
回答 1查看 2.3K关注 0票数 0

我正在尝试将dbunit和spring dbunit包含到我的项目中进行测试。我有两个文件夹:"src/test/java/dao“和"src/test/resources/dao”。

在资源道中

代码语言:javascript
运行
复制
<?xml version='1.0' encoding='UTF-8'?>
<dataset> 
<Brands id="1" brandName="Apple" /> 
</dataset>

尝试了大写和小写(品牌,品牌),仍然有同样的问题。

在main java中

代码语言:javascript
运行
复制
public class BrandsDaoTest {

@Autowired
private BrandsDao brandsDao;
private Brand brand;

private static final int ID = 1;
private static final String BRANDNAME = "apple";
private static final String UBRANDNAME = "horizont";

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:app-context.xml","classpath:test-context.xml" })
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class,
DbUnitTestExecutionListener.class })
@Test
@DatabaseSetup("schema.xml")
public void find(){

    Brand brand = brandsDao.find(1);
    assertNotNull(brand);
    brandsDao.delete(ID);
    assertNull(brandsDao.find(ID));

}
}

我的品牌实体:

代码语言:javascript
运行
复制
@Entity
@Table(name = "brands")
public class Brand {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;


@Column(name="BrandName",nullable=false)
private String brandName;
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name="BrandId",updatable=false)
private List<Device> devices;


public Brand(){

}

public Brand(int id,String brandName){
    this.id = id;
    this.brandName = brandName;
}

public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}


public String getBrandName() {
    return this.brandName;
}
public void setBrandName(String brandName) {
    this.brandName = brandName;
}   


public List<Device> getDevices(){
    return this.devices;
}

public void setDevices(List<Device> devices){
    this.devices = devices;
}

 public boolean equals(Object obj) {
     boolean result = false;
       if (!(obj instanceof Brand))
            return result;
       Brand brand = (Brand)obj;
       if(this.getId() == brand.getId())
           result = true;
       return result;
 }
}

这是我的连接:

代码语言:javascript
运行
复制
bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="org.h2.Driver"/>
    <property name="url"      value="jdbc:h2:mem:dbtest;
    MODE=MySQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE" />

    <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"
        value="com.entities" />

    <property name="hibernateProperties">
        <props>
            <prop key="dialect">org.hibernate.dialect.H2Dialect</prop>
            <prop key="connection.useUnicode">true</prop>
            <prop key="connection.characterEncoding">UTF-8</prop>
            <prop key="hibernate.hbm2ddl.auto">create-drop</prop>
        </props>
    </property>
</bean>

在使用dbunit之前,遇到了同样的问题,并且

代码语言:javascript
运行
复制
<prop key="hibernate.hbm2ddl.auto">create-drop</prop>

为我解决了这个问题。现在,如果我的schema.xml文件是空的,并且我正在使用"brandsDao.create( new Brand() )“方法在一个测试方法中添加品牌,那么一切都会正常工作。但当我添加

代码语言:javascript
运行
复制
<Brands id="1" brandName="Apple" />

对于我的schema.xml,我得到了这个"NoSuchTableException: Brands“。

另外,在我将此代码插入到我的上下文xml之前:

代码语言:javascript
运行
复制
<bean id="dbUnitDatabaseConfig" class="com.github.springtestdbunit.bean.DatabaseConfigBean">
    <property name="datatypeFactory">
        <bean class="org.dbunit.ext.mysql.MySqlDataTypeFactory" />
    </property>
    <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"/>

</bean>

我有“没有在模式null中找到表'BRANDS‘”。我尝试了关于这个错误的不同文章,但仍然没有任何帮助。我猜当dbunit试图从模式中插入数据时,我的数据库并没有被创建。

将会对一些提示或建议心存感激。

EN

回答 1

Stack Overflow用户

发布于 2014-09-13 17:09:32

感谢Alan Hay的回复。我已经在我的sessionFactory bean中尝试了您的hibernate属性集

代码语言:javascript
运行
复制
<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan"
        value="com.entities" />

    <property name="hibernateProperties">
        <props>
            <prop key="dialect">${hibernate.dialect}</prop>
            <prop key="connection.useUnicode">true</prop>
            <prop key="connection.characterEncoding">UTF-8</prop>
            <prop key="hibernate.hbm2ddl.auto">create</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.cache.use_second_level_cache">false</prop>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
        </props>
    </property>
</bean>

最有帮助的是

代码语言:javascript
运行
复制
<prop key="hibernate.show_sql">true</prop>

它为我提供了创建虚拟数据库的完整痕迹。所有名称都是小写的,所以更改后

代码语言:javascript
运行
复制
<Brands id="1" brandName="Apple" />

代码语言:javascript
运行
复制
<brands id="1" brandName="Apple" /> 
<brands id="2" brandName="Apple2" /> 

啊,真灵。我很确定我以前试过这个,也许我没有包括

代码语言:javascript
运行
复制
<bean id="dbUnitDatabaseConfig" class="com.github.springtestdbunit.bean.DatabaseConfigBean">
    <property name="datatypeFactory">
        <bean class="org.dbunit.ext.mysql.MySqlDataTypeFactory" />
    </property>
    <property name="caseSensitiveTableNames" value="true" />
</bean>

在那个时候。然而,它现在运行得很好。再次感谢你的提示。

现在,我的hibernate属性如下所示:

代码语言:javascript
运行
复制
 <props>
            <prop key="dialect">org.hibernate.dialect.H2Dialect</prop>
            <prop key="connection.useUnicode">true</prop>
            <prop key="connection.characterEncoding">UTF-8</prop>
            <prop key="hibernate.hbm2ddl.auto">create</prop>
            <!--<prop key="hibernate.show_sql">true</prop> -->

        </props>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25821235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档