![](/img/trans.png)
[英]When calling a spring Non-Transactional method from a Transactional Method in another instance, does the transaction get propagated?
[英]Spring Boot - caling transactional method from non-transactional cause update
我想知道最近遇到的一個案例。 假設我們有一個如下的服務方法:
@Override
public User addUser(UUID organizationId, User user) {
Organization organization = organizationRepository.findById(organizationId).orElseThrow(IllegalArgumentException::new);
user.setOrganization(organization);
organization.getUsers().add(user);
invitationService.deleteByUserEmail(user.getEmail());
return user;
}
組織是通過存儲庫方法提供的:
@Repository
public interface OrganizationRepository extends JpaRepository<Organization, UUID> {
Optional<Organization> findById(UUID id);
}
添加用戶的工作僅是因為invitationService.deleteByUserEmail(user.getEmail());
存在。 整個方法屬於另一個服務,其外觀如下:
@Override
@Transactional
public void deleteByUserEmail(String userEmail) {
invitationRepository.deleteByUserEmail(userEmail);
}
我不確定我是否正確理解為什么添加用戶有效。 根據Hibernate Docs的說法,僅當實體處於受管狀態並且更新在單個事務中進行時,才會發生自動更新。 如果我的推論是正確的,則會發生以下步驟:
盡管addUser方法是非事務性的,是否有可能?
在您的一個配置類中,您可能注冊了特殊的過濾器,這些過濾器基本上在整個請求的生命周期內都打開會話/實體管理器:
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
要么
org.springframework.orm.hibernate5.support.OpenSessionInViewFilter
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.