在Java中,@Transactional是一個注解,用于指示方法應該在事務中執行。它可以應用于類級別或方法級別。
在類級別上使用@Transactional注解時,對類中的所有方法都將應用事務。這意味著類中的每個方法都將被包裝在一個事務中,并且當其中一個方法調用另一個方法時,它們將在同一個事務中執行。
在方法級別上使用@Transactional注解時,只有被注解的方法將在事務中執行。這允許您有選擇地將某些方法包裝在事務中,而其他方法則不會。
@Transactional注解可以使用不同的屬性來定義事務的行為,例如傳播行為、隔離級別、超時等。一些常用的屬性包括:
以下是一個使用@Transactional注解的示例:
@Service
@Transactional
public class ProductService {
@Autowired
private ProductRepository productRepository;
public void createProduct(Product product) {
productRepository.save(product);
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void updateProduct(Product product) {
productRepository.save(product);
}
@Transactional(readOnly = true)
public Product getProductById(Long id) {
return productRepository.findById(id).orElse(null);
}
}
在上面的示例中,createProduct方法和getProductById方法將在同一個事務中執行。updateProduct方法將在一個新的事務中執行,即使它被createProduct方法調用。