Я не уверен, что другие ответы о том, что вы должны flush()
, верны, так как это ничего не передаст в базу данных.См. Документы Hibernate .При очистке сеанса данные, которые в данный момент находятся в сеансе, просто синхронизируются с данными в базе данных.Поэтому ваше исключение имеет смысл, если вы не вызвали myobject.save()
в своем методе setUp ().
Я не думаю, что вы хотите вызывать commit()
где-либо, потому что вы хотите, чтобы все откатывалось после завершения теста,Используйте эти аннотации для вашего Class
@RunWith(SpringJUnit4ClassRunner.class)
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
@Transactional
Затем вы можете добавить @before
в свой метод setUp (), хотя, если ваш класс расширяет TestCase, это будет то же самое.Thor84no верен в том, что метод @before будет выполняться в той же транзакции, что и ваш метод @Test.Если вы на самом деле хотели заполнить базу данных зафиксированными данными, вы можете использовать метод, помеченный @beforeTransaction
.
[РЕДАКТИРОВАТЬ]
Судя по обновленному вопросу, похоже, что вы этого не сделалиназывается persist()
или похожим на объект, который, как вы говорите, вы создали в setup (), и он считается отсоединенным (т.е. не сохранен в базе данных в вашей транзакции).