Я занимаюсь волонтерским развитием для местного школьного округа. Они используют Spring и Hibernate для базового приложения CRUD. Мне удалось запустить некоторые тесты JUnit для базы данных разработки, но я не хотел бы пробовать их для HSQLDB с использованием DbUnit.
Я получаю исключение NoSuchTableException, когда DbUnit загружает исходные данные из XML-файла. Я прочитал другие сообщения на StackOverflow по этому поводу, и они, как правило, рекомендуют установить для свойства Hibernate hibernate.hbm2ddl.auto значение create-drop. Я сделал это и все еще получаю исключение. Мне интересно, есть ли что-то основное в настройке, чего мне не хватает.
Это мой тестовый пример:
@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);
}
}
Это мои данные DbUnit для заполнения таблицы:
<?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>
Это определение источника данных в spring-test-datasource.xml.
<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>
И этот spring-test-dao.xml, в котором определены свойства DAO и Hibernate:
<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 для таблицы:
<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>
Обратите внимание, что я установил для свойства hibernate hbm2dll.auto значение «create-drop». Это то, что предлагают другие сообщения SO. Это должно создать таблицу во время инициализации, но я получаю следующую трассировку стека:
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...
Есть ли простая конфигурация, которую мне не хватает? Должны ли имена схемы и каталога в файле Hibernate каким-то образом совпадать с URL-адресом hsqldb? Любая помощь приветствуется!
1 ответ
Запустил ли ваш модульный тест инфраструктуру гибернации. Потому что похоже, что вы хотите использовать Hibernate для создания таблиц. Но это работает только в том случае, если ваш тест сначала «запускает» спящий режим.
Похожие вопросы
Новые вопросы
hibernate
Hibernate - это библиотека объектно-реляционного отображения (ORM) для языка Java, позволяющая разработчикам использовать модели доменов в стиле POJO в своих приложениях способами, выходящими далеко за пределы объектно-реляционного отображения.