Насколько мне известно, setComplete()
является , а не частью API Hibernate (укажите ссылку, когда вы ссылаетесь на что-то), это часть API AbstractTransactionalSpringContextTests
, который является удобным базовым классом для тестов на основе JUnit 3.8, которые должны выполняться в транзакции, но обычно откатывает транзакцию после завершения каждого теста . Метод setComplete()
позволяет изменить это поведение транзакции по умолчанию. Из своего Javadoc:
Заставить транзакцию принять этот метод теста , даже если по умолчанию установлен откат.
В следующем разделе документации приведены более конкретные случаи использования:
AbstractTransactionalSpringContextTests
зависит от
PlatformTransactionManager
боб
определяется в приложении
контекст. Имя не имеет значения из-за
на использование autowire по типу.
Обычно вы продлеваете
подкласс,
AbstractTransactionalDataSourceSpringContextTests
.
Этот класс также требует, чтобы
Определение компонента источника данных - снова
с любым именем - присутствовать в
контекст приложения. Это создает
JdbcTemplate
переменная экземпляра,
полезно для удобного запроса, и
предоставляет удобные методы для удаления
содержимое выбранных таблиц (помните
что транзакция будет отменена
по умолчанию, так что это безопасно).
Если вы хотите совершить транзакцию
программно - необычно, но
иногда полезно, если вы хотите, чтобы определенный тест заполнял
База данных - вы можете позвонить
setComplete()
метод, унаследованный от
AbstractTransactionalSpringContextTests
.
Это приведет к транзакции
совершать вместо отката. Как
альтернатива, если вы разрабатываете
против Java 5 или выше и
простирающийся
AbstractAnnotationAwareTransactionalTests
,
Вы можете аннотировать свой метод испытаний с
@Rollback(false)
чтобы достичь того же
эффект через конфигурацию.
Есть также удобная возможность
завершить транзакцию перед тестом
дело заканчивается, вызывая
endTransaction()
метод. Это будет
откатить транзакцию по умолчанию
и передайте это только если setComplete()
ранее был вызван. это
функциональность полезна, если вы хотите
проверить поведение «отключен»
объекты данных, такие как отображенные в Hibernate
объекты, которые будут использоваться в Интернете или
уровень удаленного взаимодействия вне транзакции.
Часто ленивые ошибки загрузки
обнаружен только через тестирование пользовательского интерфейса; если
Вы звоните endTransaction()
Вы можете
обеспечить правильную работу интерфейса
через ваш набор тестов JUnit.
Hibernate Session#flush()
очень отличается, он просто говорит Hibernate писать ожидающие изменения в базу данных, он не взаимодействует с транзакцией.