Я только что настроил тест, который проверяет, могу ли я вставлять записи в свою базу данных с помощью Hibernate. Что меня сводит с ума, так это то, что Hibernate на самом деле не удаляет записи, хотя и сообщает, что они исчезли!
Приведенный ниже тест выполняется успешно, но когда я потом проверяю свою БД, вставленные записи все еще там! Я даже пытаюсь проверить это с помощью assert (да, у меня есть -ea как параметр vm). Кто-нибудь знает, почему записи не удаляются?
public class HibernateExportStatisticDaoIntegrationTest {
HibernateExportStatisticDao dao;
Transaction transaction;
@Before
public void setUp(){
assert numberOfStatisticRowsInDB() == 0;
dao = new HibernateExportStatisticDao(HibernateUtil.getSessionFactory());
}
@After
public void deleteAllEntries(){
assert numberOfStatisticRowsInDB() != 0;
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
for(PersistableStatisticItem item:allStatisticItemsInDB()) {
session.delete(item);
}
session.flush();
assert numberOfStatisticRowsInDB() == 0;
}
@Test public void exportAllSavesEntriesToDatabase(){
int expectedNumberOfStatistics = 20;
dao.exportAll(StatisticItemFactory.createTestStatistics(expectedNumberOfStatistics));
assertEquals(expectedNumberOfStatistics, numberOfStatisticRowsInDB());
}
private int numberOfStatisticRowsInDB() {
return allStatisticItemsInDB().size();
}
@SuppressWarnings("unchecked")
private List<PersistableStatisticItem> allStatisticItemsInDB(){
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
transaction = session.beginTransaction();
Query q = session.createQuery("FROM PersistableStatisticItem item");
return q.list();
}
}
Консоль заполнена
Hibernate: delete from UPTIME_STATISTICS where logDate=? and serviceId=?
но ничего не было удалено, когда я проверял это.