如何解决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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。