Как мога да проверя дали всичките ми таблици са празни с HQL/Hibernate?

Имам голям набор от функционални тестове. Всеки тест е независим. Но от време на време има проблем и един от тези тестове изтича (изключение се случва, преди данните да могат да бъдат почистени и т.н.) и някои от следващите тестове може да се провалят.

Така че първото нещо, което искам да направя във всеки от тези тестове, е да проверя дали базата данни е наистина празна. Би било полезно да знаете, че счупването се дължи на теч, а не на регресия.

Бих искал да знам дали мога да направя това с една заявка, защото бих искал да избегна да правя и поддържам нещо като:

sessionFactory.getCurrentSession().createQuery("Select a From A a").list().isEmpty()
...
sessionFactory.getCurrentSession().createQuery("Select z From Z z").list().isEmpty()

Намерих това за mysql: Списък с непразни таблици в MySQL база данни но е специфичен.

Благодаря :)


person Maxime ARNSTAMM    schedule 14.02.2012    source източник


Отговори (2)


Това, което правя, е да настроя моя "hibernate.hbm2ddl.auto" да създава в hibernate.cfg.xml и във всеки тест нулирам своята sessionfactory с помощта на

sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();

По този начин базата данни се пресъздава за всеки тест

person bvanvelsen    schedule 14.02.2012
comment
това е идея, но се страхувам, че ще отнеме много време за изпълнение. Ако не намеря нищо друго, ще тествам вашето решение. - person Maxime ARNSTAMM; 14.02.2012
comment
@Maxime: Не оптимизирайте преждевременно - person bvanvelsen; 14.02.2012
comment
Това не е моят код, това са моите тестове. Пускам ги при всяка компилация (сърфирам с mvn тест), така че не мога да ги накарам да отнемат твърде много време. - person Maxime ARNSTAMM; 14.02.2012
comment
както и да е, аз също използвам това решение и когато моята база данни е само за тестване, тя е доста малка, тогава това работи доста бързо... работи ли за вас? - person bvanvelsen; 15.02.2012

Какво ще кажеш

session.createQuery("select 1 from table").setMaxSize(1).list().isEmpty()
person aviad    schedule 14.02.2012
comment
изборът 1 от таблицата ще извлече данни от всяка таблица в моята база? - person Maxime ARNSTAMM; 14.02.2012
comment
заменете го с конкретно име на таблица - person aviad; 14.02.2012
comment
казах във въпроса си, че не искам да правя заявка по таблица, това е болезнено и не се поддържа. - person Maxime ARNSTAMM; 14.02.2012