Spring 与 JPA 中的 @Transactional 注解的区别
Spring Boot JPA Spring About 1,413 words配置不同
- 隔离级别
Spring提供事务范围内的隔离级别,JPA只能在链接范围。
- 传播性
Spring中使用propagation属性。JPA中使用value属性。
- 只读
- 只在
Spring中可用。
- 只在
- 超时
- 只在
Spring中可用。
- 只在
- 回滚
Spring中提供:rollbackFor和noRollbackFor。JPA中提供:rollbackOn和dontRollbackOn。
适用性不同
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);
}
}
参考
Views: 2,254 · Posted: 2023-03-04
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...