Spring 与 JPA 中的 @Transactional 注解的区别

Spring Boot JPA Spring About 1,413 words

配置不同

  • 隔离级别
    • Spring提供事务范围内的隔离级别,JPA只能在链接范围。
  • 传播性
    • Spring中使用propagation属性。
    • JPA中使用value属性。
  • 只读
    • 只在Spring中可用。
  • 超时
    • 只在Spring中可用。
  • 回滚
    • Spring中提供:rollbackFornoRollbackFor
    • JPA中提供:rollbackOndontRollbackOn

适用性不同

Spring实现了JPA中的@Transactional注解,所以JPA中的@Transactional注解可以用于Spring项目中。

当然:Spring中的@Transactional注解,不能用于非Spring项目。

代码

Spring Transactional

import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional(
  isolation = Isolation.READ_COMMITTED, 
  propagation = Propagation.SUPPORTS, 
  readOnly = false, 
  timeout = 30)
public class CarService {

    @Autowired
    private CarRepository carRepository;

    @Transactional(
      rollbackFor = IllegalArgumentException.class, 
      noRollbackFor = EntityExistsException.class,
      rollbackForClassName = "IllegalArgumentException", 
      noRollbackForClassName = "EntityExistsException")
    public Car save(Car car) {
        return carRepository.save(car);
    }
}

JPA Transactional

import javax.transaction.Transactional;

@Service
@Transactional(Transactional.TxType.SUPPORTS)
public class RentalService {

    @Autowired
    private CarRepository carRepository;

    @Transactional(
      rollbackOn = IllegalArgumentException.class, 
      dontRollbackOn = EntityExistsException.class)
    public Car rent(Car car) {
        return carRepository.save(car);
    }
}

参考

https://www.baeldung.com/spring-vs-jta-transactional

Views: 932 · Posted: 2023-03-04

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb/LiteNote

扫描下方二维码关注公众号和小程序↓↓↓

扫描下方二维码关注公众号和小程序↓↓↓


Today On History
Browsing Refresh