Tôi có một ứng dụng JavaEE sử dụng Hibernate để kết nối với cơ sở dữ liệu. Trong một số phần của ứng dụng của tôi, tôi có các cuộc gọi đến phương thức có chú thích @Transactional
. Trong một số trường hợp này, tôi muốn khôi phục toàn bộ giao dịch (cuộc gọi phương thức dịch vụ bên ngoài và bên trong). Và trong một số trường hợp, tôi muốn khôi phục chỉ cuộc gọi phương thức dịch vụ bên trong (nghĩa là, quay lại savepoint được xác định khi bắt đầu phương thức nội bộ).Cách quay trở lại các giao dịch lồng nhau lưu trữ bằng Hibernate
Phần đầu tiên đã có sẵn, nhưng tôi gặp vấn đề với phiên bản thứ hai. Khi tôi làm như sau, tôi nhận được một "UnexpectedRollbackException" với thông báo "Transaction roll back vì nó đã được đánh dấu là rollback-only".
@Service
public class OuterService{
@AutoWired
private InnerServcie innerService;
@Transactional
public void outer(){
try{
innerService.inner();
}catch(RuntimeException e){
//if i dont throw this up, it will give me the "UnexpectedRollbackException"
System.out.println("I cought a RuntimeException");
}
}
}
@Service
public class InnerServcie{
@Transactional
public void inner(){
//here we insert some data into db using hibernate
//but something goes wrong and an exception is thrown
}
}
tôi thêm này với phương pháp bên trong, và tôi nhận được một bế tắc! Bất kỳ ý tưởng? – hfm