Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DbUnit NoSuchTableException与Spring、Hibernate、HSQSLB_Hibernate_Spring_Junit_Dbunit - Fatal编程技术网

DbUnit NoSuchTableException与Spring、Hibernate、HSQSLB

DbUnit NoSuchTableException与Spring、Hibernate、HSQSLB,hibernate,spring,junit,dbunit,Hibernate,Spring,Junit,Dbunit,我正在为当地的学区做一些志愿者培训。他们使用Spring和Hibernate作为基本的CRUD应用程序。我能够在开发数据库上运行一些JUnit测试,但不想使用DbUnit对HSQLDB进行测试 我得到一个NoSuchTableException,DbUnit从XML文件加载初始数据。我已经阅读了有关StackOverflow的其他文章,他们倾向于建议将Hibernate属性Hibernate.hbm2ddl.auto设置为createdrop。我已经这样做了,但仍然得到例外。我想知道是否有一些基

我正在为当地的学区做一些志愿者培训。他们使用Spring和Hibernate作为基本的CRUD应用程序。我能够在开发数据库上运行一些JUnit测试,但不想使用DbUnit对HSQLDB进行测试

我得到一个NoSuchTableException,DbUnit从XML文件加载初始数据。我已经阅读了有关StackOverflow的其他文章,他们倾向于建议将Hibernate属性Hibernate.hbm2ddl.auto设置为createdrop。我已经这样做了,但仍然得到例外。我想知道是否有一些基本的设置,我错过了

这是我的测试用例:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
        "classpath:spring-test-datasource.xml",
        "classpath:spring-test-dao.xml"
})
@Transactional
public class HibernateRitsAdminDaoTest {
    @Autowired protected RitsAdminDao ritsAdminDao;
    @Autowired protected DataSource dataSource;
    protected IDatabaseTester dbTester;

    @Before
    public void setUp() throws Exception {
        dbTester = new DataSourceDatabaseTester(dataSource);
        IDataSet dataSet = new FlatXmlDataSetBuilder().build(new FileInputStream("test/RitsAdminsTest.xml"));
        dbTester.setDataSet(dataSet);
        dbTester.onSetup();
    }

    @After
    public void tearDown() throws Exception {
        dbTester.onTearDown();
    }

    @Test
    public void testGetAll() throws Exception {
        List<RitsAdmin> ritsAdmins = ritsAdminDao.getAll();
        assertTrue(ritsAdmins.size() > 0);
    }
}
有没有我缺少的简单配置?Hibernate文件中的模式和目录名称是否必须与hsqldb URL匹配?
感谢您的帮助

您的单元测试是否启动了hibernate框架。因为看起来您想要使用Hibernate来创建表。但这只有在测试首先“启动”hibernate时才有效。

没错,在hibernate/dbunit中搜索问题之前,先查看spring上下文是否正确加载。删除dbunit代码并告诉我们您的Springbean是否是autoriwred。谢谢大家,我删除了dbunit代码并指向另一个数据源—我们用于开发的MSSQL数据库。我能够从JUnit对该数据库运行查询,因此我认为数据源和DAOBean加载正确。关于如何“启动”休眠的思考?现在Hibernate DAO扩展了另一个Hibernate类,该类具有基本的存储、删除、getById等。该类使用HibernateTemplate。否则,如果Hibernate“启动”了,我会寻找什么来尝试找到它的位置?谢谢如果它适用于普通数据库(不适用于memmory数据库),但不适用于memmory数据库,那么问题可能是您使用了两个不同的memmory数据库,或者数据库在初始化后“关闭”。发现DbUnit由..查询,在我的例子中,是查询表schoolnet.dbo.tbl_snu rits_admins。如果在DbUnit平面XML文件中将表名设置为schoolnet.dbo.tbl_sn_rits_admins,则仍然会出现NoSuchTableException。如果我从HibernateXML文件中删除模式和目录属性,那么DbUnit和HSQLDB可以正常运行。现在我正在考虑将目录和模式属性从表的HibernateXML文件移到SpringXML文件中。有单独的测试和生产SpringXML文件是一种常见的习惯用法吗?
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
    <tbl_sn_rits_admins profile_id="1"/>
    <tbl_sn_rits_admins profile_id="6"/>
    <tbl_sn_rits_admins profile_id="88"/>
</dataset>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
        <property name="url" value="jdbc:hsqldb:mem:schoolnet"/>
        <property name="username" value="sa"/>
        <property name="password" value=""/>
    </bean>
<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="mappingResources">
            <list>
                <value>us/mn/k12/district/domain/RitsAdmin.hbm.xml</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">create-drop</prop>
                <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
            </props>
        </property>
    </bean>

    <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
<hibernate-mapping package="us.mn.k12.district.domain">
    <class name="RitsAdmin" table="tbl_sn_rits_admins" schema="dbo" catalog="schoolnet">
        <id name="profileId" type="long">
            <column name="profile_id" />
        </id>
    </class>
</hibernate-mapping>
org.dbunit.dataset.NoSuchTableException: tbl_sn_rits_admins
    at org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:288)
    at org.dbunit.operation.DeleteAllOperation.execute(DeleteAllOperation.java:109)
    at org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:79)
    at org.dbunit.AbstractDatabaseTester.executeOperation(AbstractDatabaseTester.java:190)
    at org.dbunit.AbstractDatabaseTester.onSetup(AbstractDatabaseTester.java:103)
    at us.mn.k12.district.dao.HibernateRitsAdminDaoTest.setUp(HibernateRitsAdminDaoTest.java:41)
... keeps going...