최대 절전 모드를 사용하여 데이터베이스에 항목을 삽입 할 수 있는지 확인하는 테스트를 설정했습니다. 나를 미치게하는 것은 Hibernate가 항목이 삭제되지 않는다는 것이다.Hibernate가 내 객체를 삭제하지 않습니다. 왜?
아래의 테스트가 성공적으로 수행되었지만 나중에 DB를 검사 할 때 삽입 된 항목이 그대로 남아 있습니다! 나는 심지어 어설트을 사용하여 그것을 체크하려고한다. (예, 나는 -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=?
으로 가득하지만 난 그것을 확인할 때 아무 것도 삭제되지 않았습니다.
적절한 Hibernate 사용법에 대한 지식이'nil'에 가깝다는 것을 알고있을 것입니다. 내일 다시 일하러 돌아올 때 어떻게 작동하는지 살펴볼 것입니다. 감사! – oligofren
제공된 코드가 충분하지 않았더라도 트랜잭션이 원인이라는 것이 옳았습니다. 코드를 사용하는 경우 session.delete()에 도달하면 세션이 닫혔다는 예외가 발생합니다. 이유는 모르겠지만 각 논리적 연산 (아마도 여러 트랜잭션으로 구성)마다 새로운 세션을 여는 것이 더 합리적이라고 생각합니다. – oligofren
꽤 끝나지 않았습니다 ... 모든 것을 작동 시키려면 기본적으로 제가 한 일입니다. 데이터베이스/최대 절전 모드 I에 대한 쿼리와 관련된 모든 방법에서 : - 새 세션을 열었습니다. 세션 세션 = HibernateUtil.getSessionFactory(). openSession(); - 새 트랜잭션을 시작했습니다. '세션. - 트랜잭션을 위탁 함 'session.flush(); ' 'session.getTransaction(). commit();' – oligofren