Tất cả những gì tôi đọc về Hibernate nói rằng bạn phải quay trở lại giao dịch và đóng phiên giao dịch khi một lỗi xảy ra, và có thường một số biến thể của mã sau (lấy từ tài liệu của Hibernate) cho là một ví dụ:Điều gì sẽ xảy ra nếu bạn không quay trở lại giao dịch trong Hibernate?
Session sess = factory.openSession();
Transaction tx = null;
try {
tx = sess.beginTransaction();
// do some work
...
tx.commit();
} catch (RuntimeException e) {
if (tx != null) tx.rollback();
throw e; // or display error message
} finally {
sess.close();
}
Mô hình này có vẻ lạ với tôi vì một vài lý do. Đầu tiên, nó có vẻ phức tạp một cách không hợp lý cho một khung công tác thường hướng tới việc làm cho mọi thứ trở nên đơn giản. Quan trọng hơn, điều gì sẽ xảy ra nếu mã trong khối try
ném thứ gì đó khác với một số RuntimeException
? Dường như Hibernate phải có khả năng kết thúc phiên giao dịch một cách duyên dáng với một giao dịch mở trong trường hợp đó, có lẽ bằng cách chuyển nó trở lại, nhưng nếu đó là sự thật, tại sao bận tâm gọi rollback
ở tất cả?
Ai đã nói với bạn Hibernate khiến mọi việc đơn giản? :) – skaffman