Spring Data Jpa / Hades事务行为

| 根据Spring Data JPA参考(以前为Hades),   存储库实例上的CRUD方法   默认情况下是事务性的。 如果一种方法涵盖多个存储库,则示例:
@Transactional
public void addRoleToAllUsers(String roleName) {
    Role role = roleRepository.findByName(roleName);
    for (User user : userRepository.readAll()) {
        user.addRole(role);
        userRepository.save(user);
    }
}
参考状态   交易配置位于   仓库将被忽略,因为   外部交易配置   确定实际使用的一种。 内部事务的行为将被忽略是默认的Spring事务行为还是由Spring Data JPA明确处理?     
已邀请:
这是默认行为。 如您所见,默认情况下,将
JpaRepository
的方法标注为
@Transactional
并带有传播(
REQUIRED
),这是该传播类型的正常行为(请参见10.5.7事务传播)。     
JpaRepository
/实现类中的
@Transactional
将默认使这些方法简单地参与外部事务。因此,如果您认为“忽略”是一个误导性单词,请随时为其打开JIRA(我认为它在某种程度上是;))。 如果要更改CRUD方法的事务配置,只需在具体的存储库界面内重新声明CRUD方法,然后向其中添加包含所需配置的2即可。有关详细信息,请参见参考文档。     
这完全取决于@Transactional批注中设置的传播。默认情况下,它设置为
REQUIRED
,这意味着:如果没有事务上下文,则创建一个并在方法末尾提交;否则,将方法调用包含在现有事务上下文中。 还有其他一些:REQUIRES_NEW,SUPPORTS,NEVER等。有关详细信息,请参见http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/transaction/annotation/Propagation.html。     

要回复问题请先登录注册