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: 1,350 · Posted: 2023-03-04
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...