У меня есть класс обслуживания, который вызывает другие служебные классы. Сами эти занятия иногда
сохранить доменные объекты и очистить их (например: new User(...).save(flush:true)
). Я звоню в класс обслуживания из теста.
Является ли мой сервис транзакционным?
Из того, что я вижу в логах, режим промывки всегда меняется:
impl.SessionImpl setting flush mode to: MANUAL
hibernate.SQL select this_.id as i...
type.StringType binding '1rAdPVixha' to parameter
....
impl.SessionImpl setting flush mode to: AUTO
Но мои настоящие вопросы: если мой метод обслуживания является транзакционным при вызове вне службы (например, в тесте), как я могу заставить службу откатить все данные?
РЕДАКТИРОВАТЬ: Я нашел это:
TransactionAspectSupport.currentTransactionInfo().transactionStatus.setRollbackOnly()
Но я все еще хочу знать, является ли мой сервис полностью транзакционным, т.е. даже если я вызову domain.save (flush: true) из служебного класса в моем методе обслуживания , он будет работать в том же TX Context.
Как это:
void testSomething() {
svc.process(data);
assert data.exists() ;// true if no rollback happened
}
class MySvc() {
void process(data) {
myUtil.process(data);
}
}
class MyUtil {
void process(data) { data.save(flush:true)}
}