При запуске новой транзакции, используя @Transactional(propagation = Propagation.REQUIRES_NEW
) в текущей транзакции, которая была запущена с помощью @Transactional(propagation = Propagation.REQUIRED)
, создается новый сеанс для новой транзакции?
Можно ли использовать только один сеанс для всех транзакций, если вышеприведенное верно?
Вот наглядный пример:
@Transactional(propagation = Propagation.REQUIRED
public void startParentTransaction() {
ChildObject childObject = newChildTransaction();
childObject.lazyLoadedAttribute();
ChildObject childObject = newChildTransaction();
childObject.lazyLoadedAttribute();
}
@Transactional(propagation = Propagation.REQUIRES_NEW
public ChildObject newChildTransaction() {
ChildObject childObject = callRepositoryOrDao();
childObject.changeState();
return childObject;
}
Будет ли работать звонок на childOjbect.lazyLoadedAttribute()
? Или будет LazyInitializationException
брошен?
Можем ли мы сделать так, чтобы все транзакции происходили за один Session
?